[英]LINQ method with multiple conditions and combinations
假设我有一个包含1000个条目的详细列表。 如何使用LINQ方法结合FirstCode和SecondCode属性从数据库详细信息表中精确检索匹配数据?
public class Detail
{
public string FirstCode { get; set; }
public string SecondCode { get; set; }
}
如果我们要检索单个数据,它将是这样的:
foreach(var detail in details)
{
var retrievedData = context.Details
.Where(x => x.FirstCode == detail.FirstCode && x.SecondCode == detail.SecondCode)
.FirstOrDefault();
// Add to some list here
}
但是我不想从数据库中获取1000次,我也不想从Details表中获取所有数据,然后在.NET级别中进行搜索,因为如果我们有大量数据,这是不理想的(对于例如详细信息表中的500,000多条记录。
您需要以编程方式生成'where'子句。 从一个返回Details数据库表中所有行的查询开始...
IQueryable<XDetail> queryable = (from d in context.Details select d);
...其中XDetail是数据库表的类类型。 我假设它与您问题中的Detail类不同。 现在,您需要生成查询的所有子句,以指定我们想要的条目列表...
var predicate = PredicateBuilder.False<XDetail>();
foreach(Detail d in details)
predicate = predicate.Or((xd) => xd.FirstCode == d.FirstCode &&
xd.SecondCode == d.SecondCode));
queryable = queryable.Where(predicate);
var results = queryable.ToList();
您可以在此处查看PredicateBuilder类的代码。 请注意,Entity Framework将生成所需的SQL,但该查询的大小有限。 所以添加1000条款肯定会让它变得更大。 您必须进行实验,但在达到限制之前可能会限制在100或更低。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.