gpt4 book ai didi

c# - 具有多个条件和组合的 LINQ 方法

转载 作者:行者123 更新时间:2023-11-30 17:28:32 24 4
gpt4 key购买 nike

假设我有一个包含 1000 个条目的详细列表类。如何使用 LINQ 方法结合 FirstCode 和 SecondCode 属性从数据库 Details 表中准确检索匹配数据?

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类的代码here .请注意, Entity Framework 将生成所需的 SQL,但该查询的大小是有限制的。所以增加 1000 个子句肯定会变得很大。您将不得不进行试验,但在达到限制之前您可能会被限制在 100 或更少。

关于c# - 具有多个条件和组合的 LINQ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52738508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com