首页 > 解决方案 > 如何通过复杂子句列表创建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);

标签: c#linqentity-framework-core

解决方案


老实说,这听起来像是您想要使用 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 代码添加到您的工作中。


推荐阅读