Min*_*nda 5 c# linq database list intersect
我有一个名为admin的用户,该用户具有公司列表。我想返回拥有一个或多个相同公司的用户列表。我正在使用Linq使用此查询,但是我不确定为什么它不起作用。我不太了解.Any()的功能,但是如果我不包括它,则程序会出现语法错误。这是我的尝试:
public List<User> GetUsers(User admin)
{
return Users.Where(user=>user.Companys.Intersect(admin.Companys)).Any()).ToList();
}
Run Code Online (Sandbox Code Playgroud)
编辑:评论中的人们正在考虑重写您的 Company 对象的平等,他们是正确的,但我们也许可以做一些更简单的事情。您需要重写 equals 的原因是因为 .Net 不知道如何在您创建的对象中查找相等性。所以你需要编程如何让它知道。然而,大多数时候它确实知道如何在 ID 中找到相等性。
编辑 2:Intersect Any 是可行的方法,因为您想要将列表与列表进行比较
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();
}
Run Code Online (Sandbox Code Playgroud)
因此 Contains 将搜索列表以查看列表中是否有任何单个值。因为它只搜索单个值,所以对此不起作用。
Intersect 将返回两个列表的交集。例如 [1,2,3] [2,3,4] 将给出 [2,3]。
其中需要一个布尔值来进行函数求值。给我列表中给定函数返回 true 的值。所以当你返回 [2,3] 时它会抱怨。Any 说列表中有任何结果。所以 [2,3].Any() 返回 true,满足Where。
Contains 不返回列表的交集,只是告诉你 True 或 False,该值是否存在
希望有帮助。
| 归档时间: |
|
| 查看次数: |
3545 次 |
| 最近记录: |