Entity Framework - 如何使用 OR 子句列表构建查询
Entity Framework - how to build a query with a list of OR clauses
我正在寻找一种在 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 作为示例)。希望我把问题解释清楚了。
听起来您所描述的相当于 SQL 中的 IN
运算符(例如:WHERE Id IN (1,4,6)
)。
等效的 Linq 是这样的:
int[] list = {1,4,6};
q = q.Where(x => list.Contains(x.Id))
我正在寻找一种在 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 作为示例)。希望我把问题解释清楚了。
听起来您所描述的相当于 SQL 中的 IN
运算符(例如:WHERE Id IN (1,4,6)
)。
等效的 Linq 是这样的:
int[] list = {1,4,6};
q = q.Where(x => list.Contains(x.Id))