C# 如何使用linq从另一个列表中筛选一个列表

C# 如何使用linq从另一个列表中筛选一个列表,c#,linq,C#,Linq,我编写了以下查询来过滤查询 我使用了First(),这导致了我之前没有注意到的问题,因为Entity2也是一个集合。它只过滤第一个Id query = query.Where(x => filter.Ids.Contains(x.Entity2.Select(y => y.testId).First())); 请建议如何使用contains检查Entity2的所有testId属性 基本上,x.Entity2.Select(y=>y.testId)是我想要的ID列表 检查它们是否包含

我编写了以下查询来过滤查询

我使用了
First()
,这导致了我之前没有注意到的问题,因为
Entity2
也是一个集合。它只过滤第一个Id

query = query.Where(x => filter.Ids.Contains(x.Entity2.Select(y => y.testId).First()));
请建议如何使用contains检查Entity2的所有testId属性

基本上,x.Entity2.Select(y=>y.testId)是我想要的ID列表 检查它们是否包含在filter.Ids中


如果我理解正确,
filter.Ids
x.Entity2.Select(y=>y.testId)
都是ID列表,您需要确保
x.Entity2
中的所有ID也在
filter.Ids
中。在这种情况下,您需要以下内容:

var result = query.Where(x => x.Entity2.Count(y => filter.Ids.Contains(y.testId)) == x.Entity2.Count);

我们在这里做的是计算
query
的每个元素,以及
Entity2
filter.Ids
中的ID数。如果该数字等于
Entity2
中ID的总数,那么我们将其包括在结果中。

如果我理解正确,
filter.Ids
x.Entity2.Select(y=>y.testId)
都是ID的列表,并且您希望确保
x.Entity2
中的所有ID也在
filter.Ids
中。在这种情况下,您需要以下内容:

var result = query.Where(x => x.Entity2.Count(y => filter.Ids.Contains(y.testId)) == x.Entity2.Count);

我们在这里做的是计算
query
的每个元素,以及
Entity2
filter.Ids
中的ID数。如果该数字等于
Entity2
中的ID总数,则我们将其包括在结果中。

对于上述查询,您还可以使用
Any()
Contains()
这两种方法,它的作用如下 根据你的说法,过滤器是一个集合,它的ID和Entity2都是集合,所以假设我写了这个

query=query.Where(x=>filter.Where(a=>a.Entity2.Any(y=>a.Ids.Contains(y.testId));


但在您的查询中,您也可以删除
First()
,并可以使用
ToList()
,但如果数据较大,它将被抛出内存异常

对于上面的查询,您还可以使用
Any()
Contains()
这两种方法,它的工作原理相同 根据你的说法,过滤器是一个集合,它的ID和Entity2都是集合,所以假设我写了这个

query=query.Where(x=>filter.Where(a=>a.Entity2.Any(y=>a.Ids.Contains(y.testId));

但在您的查询中,您也可以删除
First()
,并可以使用
ToList()
,但如果数据较大,它将被抛出
OutofMemoryException