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