Linq将整数的子列表与整数列表相交

时间:2011-01-04 14:27:37

标签: linq linq-to-objects

我有一个用户列表,每个用户都包含一个关联的店面ID列表。我有一个单独的整数列表,我想找到用户的任何店面ID与单独列表中的任何整数匹配的位置。

我期待这样的事情:

clientUsers = clientUsers.Where(x => x.Storefronts.Intersect(allowedStorefrontIds));

我被告知无法从Where扩展方法的用法推断出类型参数。

在这种情况下你知道我应该如何构建我的linq吗?

2 个答案:

答案 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)应该返回您期望的列表,除非代码段中没有提到另一个列表。