【问题标题】:Entity Framework - how to build a query with a list of OR clauses实体框架 - 如何使用 OR 子句列表构建查询
【发布时间】:2021-11-11 18:22:06
【问题描述】:

我正在寻找一种在 EF 查询中链接多个 OR 子句的方法。

这是一个示例函数,当使用包含恰好 2 个元素的参数 int[] 调用该函数时,将创建一个包含它们的 OR 子句(当然,少于 2 个元素会导致异常,多于 2 个元素将被忽略):

public async Task<List<MyTable>> MyQuery(DbContext dbContext, int[] list)
{
    IQueryable<MyTable> q = dbContext.MyTable;

    q = q.Where(x => x.Id == list[0] || x.Id == list[1]);

    // here I chain several other clauses...
    q = q.Where(x => x.SomeOtherFiled == 123);

    return  await q.ToListAsync();
}

我想修改此代码,使其对数组的所有元素(1-n;即任意长度)执行 OR 逻辑。在此示例中,我使用的是 int 数据类型,但实际上它可以是任何可以存在于 EF 数据集中的数据类型。几个 AND 条件可以链接在一起(这里我以 SomeOtherFiled 为例)。我希望我能很好地解释这个问题。

【问题讨论】:

标签: .net sql-server entity-framework entity-framework-core iqueryable


【解决方案1】:

听起来您所描述的内容等同于 SQL 中的 IN 运算符(例如:WHERE Id IN (1,4,6))。

等价的Linq是这样的:

int[] list = {1,4,6};
q = q.Where(x => list.Contains(x.Id))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多