c# - 如何通过复杂子句列表创建where?
问题描述
我有一个对象列表,List<(int id1, int id2)>
我需要构建 LINQ,它与此 SQL 相同
SELECT Id1, Id2, SomeColumn
FROM SomeTable
WHERE (Id1 = 1 AND Id2 = 2) OR
(Id1 = 1 AND Id2 = 3)
我想我应该使用表达式,但我不明白该怎么做。
Expression expression = Expression.Empty();
foreach (var requestInfo in requestInfos)
{
Expression<Func<SomeDto, bool>> buf = i => i.Id1 == requestInfo.Id1 && i.Id2 == requestInfo.Id2;
expression = Expression.OrElse(expression, buf);
}
var query = _context.SomeTable.Where(expression);
解决方案
老实说,这听起来像是您想要使用 PredicateBuilder
关于这里的详细信息
本质上,虽然它会让你做类似的事情
var predicate = ProdicateBuilder.False<SomeDTO>();
foreach (var requestInfo in requestInfos)
{
predicate = predicate.Or(i=> i.Id1 == requestInfo.Id1 && i.Id2 == requestInfo.Id2);
}
然后在您的 where 子句中,您只需传入谓词。
同样,它还详细说明了如何在该链接上直接使用表达式,如果您想这样做而不是将 PredicateBuilder 代码添加到您的工作中。
推荐阅读
- node.js - pm2 在端口 80 上工作正常,但本地网络中的另一台计算机无法访问其他端口(连接被拒绝)
- azure-devops - azure devops:并行运行单元测试
- python-3.x - 无法连接到 android KivyMD 上的 mysql 数据库
- python - 从文本文件中读取条目作为列名
- c# - c#如何dapperRow到网格视图中显示的强类型对象
- html - 防止自动播放
- python - 如何在gimp python中将阴影层提升到顶部
- python - 将列表添加到 Matplotlib
- vespa - vespa.ai 出现以下错误的原因是什么?
- generics - 推理不适用于泛型方法