如何使用 LINQ 在多个 OR 内创建 SQL 嵌套 AND

Sco*_*t F 5 sql linq-to-entities

我正在尝试从以下 SQL 示例创建等效的 LINQ 查询:

SELECT *
FROM FOO
WHERE 
    ((a == <val1>) AND (b == <val2>) AND (c == <val3>))
OR
    ((a == <val4>) AND (b == <val5>) AND (c == <val6>))
Run Code Online (Sandbox Code Playgroud)

总会有一个 a、b 和 c,它们将被 OR 包围在一起。这种模式可以出现 n 次。

我发现工作的唯一解决方案是使用 LINQ Union,但生成的 SQL 不是我想要的。

p.c*_*ell 2

尝试实施该PredicateBuilder课程。

那么也许你可以使用这样的东西:

var pred = PredicateBuilder.False<Foo>();

foreach(var criteria in myCriteriaSet)
{            
    pred = pred.Or(x => x.ID== criteria.ID && 
                        x.Name== criteria.Name &&
                        x.Created == criteria.SomeDate);
}

var matching = db.Foos.Where(pred);
Run Code Online (Sandbox Code Playgroud)

然后假设您的标准是可枚举的。根据需要进行修改以满足您的需求。