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 不是我想要的。
尝试实施该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)
然后假设您的标准是可枚举的。根据需要进行修改以满足您的需求。