Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq将子整数列表与整数列表相交_Linq_Linq To Objects - Fatal编程技术网

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

Linq将子整数列表与整数列表相交,linq,linq-to-objects,Linq,Linq To Objects,我有一个用户列表,每个用户都包含一个相关店面ID的列表。我有一个单独的整数列表,我想找到用户的任何店面id与单独列表中的任何整数匹配的位置 我期待着这样的事情: clientUsers = clientUsers.Where(x => x.Storefronts.Intersect(allowedStorefrontIds)); 我被告知不能从Where扩展方法的用法推断类型参数 您知道在这种情况下应该如何构造linq吗?您只需要lambda中的.Any()来检查集合交集是否包含任何元素

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

我期待着这样的事情:

clientUsers = clientUsers.Where(x => x.Storefronts.Intersect(allowedStorefrontIds));
我被告知不能从Where扩展方法的用法推断类型参数

您知道在这种情况下应该如何构造linq吗?

您只需要lambda中的
.Any()
来检查集合交集是否包含任何元素:

x => x.Storefronts.Intersect(allowedStorefrontIds).Any()
就个人而言,为了提高效率,我会这样做:

var allowedIds = new HashSet<int>(allowedStorefrontIds);

var allowedUsers = clientUsers.Where(x => x.StoreFronts.Any(allowedIds.Contains));
var allowedIds=新HashSet(allowedStorefrontIds);
var allowedUsers=clientUsers.Where(x=>x.StoreFronts.Any(allowedIds.Contains));

其中需要返回布尔表达式的函数。Intersect返回一个列表。我认为
clientUsers.Intersect(AllowedStoreFrontId)
应该返回您期望的列表,除非代码段中没有提到另一个列表。

我认为您的
Where
子句中的lambda表达式必须计算为true,我不确定它在这里是否正确。+1,我没有读过问题,也没有读过你的答案,但我知道在林克,你总是对的:)@Saeed:谢谢,太好了。但事实并非如此