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

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

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

总会有一个a,b和c一起被OR包围在一起.这种模式可以发生很多次.

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

最佳答案 尝试实现
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);

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

点赞