gpt4 book ai didi

c# - 使用循环构建 Where 子句并将每个迭代与 OR 连接

转载 作者:行者123 更新时间:2023-11-30 16:04:00 24 4
gpt4 key购买 nike

我有一个 N 对整数的列表,例如:

2, 4
5, 7
9, 10
11, 12

我需要构建一个查询:

WHERE 
(foo = 2 AND bar = 4) OR
(foo = 5 AND bar = 7) OR
(foo = 9 AND bar = 10) OR
(foo = 11 AND bar = 12)

如果它是一个固定长度的列表,我可以这样写:

var query = myClass.Where(x =>
(foo == values[0][0] && bar == values[0][1]) ||
(foo == values[1][0] && bar == values[1][1]) ||
(foo == values[2][0] && bar == values[2][1]) ||
(foo == values[3][0] && bar == values[3][1]));

但列表的长度各不相同,我正在寻找一种使用循环创建查询的方法。

我发现我可以使用 Queryable.Union() 来获得类似的结果,但考虑到查询中有更多条件,并且对列表可能很长,我宁愿避免联盟

这个问题有解决办法吗?

最佳答案

您可以执行一个技巧 - 连接查找字段:foobar 然后使用 Contains 方法:

var filters = new int[][] {
new int[] { 2, 4 },
new int[] { 5, 7 },
new int[] { 9, 10 },
new int[] { 11, 12 }
};
var newFilter = filters.Select(x => x[0] + "-" + x[1]).ToList();

var answer = dbContext.myClass.Where(x => newFilter.Contains(x.foo + "-" + x.bar)).ToList();

关于c# - 使用循环构建 Where 子句并将每个迭代与 OR 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35882253/

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