我有一个用户列表,每个用户都包含一个关联的店面ID列表。我有一个单独的整数列表,我想找到用户的任何店面ID与单独列表中的任何整数匹配的位置。
我期待这样的事情:
clientUsers = clientUsers.Where(x => x.Storefronts.Intersect(allowedStorefrontIds));
我被告知无法从Where扩展方法的用法推断出类型参数。
在这种情况下你知道我应该如何构建我的linq吗?
答案 0 :(得分:5)
你需要在lambda中使用.Any()
来检查set-intersection是否包含任何元素:
x => x.Storefronts.Intersect(allowedStorefrontIds).Any()
就个人而言,我会做这样的事情以提高效率:
var allowedIds = new HashSet<int>(allowedStorefrontIds);
var allowedUsers = clientUsers.Where(x => x.StoreFronts.Any(allowedIds.Contains));
答案 1 :(得分:0)
其中需要一个返回布尔表达式的函数。 Intersect返回一个列表。我认为clientUsers.Intersect(allowedStorefrontIds)
应该返回您期望的列表,除非代码段中没有提到另一个列表。