簡體   English   中英

使用LINQ的兩個列表的交集

[英]Intersection of two lists using LINQ

我有一個名為admin的用戶,該用戶具有公司列表。 我想返回擁有一個或多個相同公司的用戶列表。 我正在使用Linq使用此查詢,但是我不確定為什么它不起作用。 我不太了解.Any()的功能,但是如果我不包含它,則程序會出現語法錯誤。 這是我的嘗試:

public List<User> GetUsers(User admin)
{
    return Users.Where(user=>user.Companys.Intersect(admin.Companys)).Any()).ToList();

}

編輯:評論中的人正在為您的Company對象爭取平等,他們是正確的,但是我們也許可以做一些容易的事情。 需要覆蓋equals的原因是因為.Net不知道如何在創建的對象中找到相等性。 因此您需要進行編程以使其了解。 但是它確實知道如何在ID中找到相等性。

編輯2:相交是任何一種方式,因為您想將一個列表與一個列表進行比較

public List<User> GetUsers(User admin)
{
    var adminCompanyIDs = admin.Companys.Select(c => c.ID);
    return Users.Where(user=>user.Companys.Select(c => c.ID).Intersect(adminCompanyIDs).Any()).ToList();        
}

因此,包含將搜索列表以查看列表中是否有單個值。 由於它僅搜索單個值,因此不適用於該值。

相交將返回兩個列表的相交。 例如[1,2,3] [2,3,4]將得出[2,3]。

where需要布爾值進行函數求值。 給我列表中的值,其中給定的函數返回true。 因此,當您退還[2,3]時會抱怨。 任何人說列表中有任何結果。 因此[2,3] .Any()返回true,滿足Where。

包含不返回列表的交集,僅告訴您True為False,該值是否存在

希望能有所幫助。

嘗試與唯一屬性而不是對象相交

return Users.Where(user=>user.Companys.Select(c => c.ID).Intersect(admin.Companys.Select(a => a.id)).Any())
        .ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM