如何使用LINQ在多个OR中创建SQL嵌套AND [英] How to create SQL Nested ANDs inside of multiple ORs using LINQ

查看:151
本文介绍了如何使用LINQ在多个OR中创建SQL嵌套AND的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从下面的SQL示例中创建等价的LINQ查询:

I'm trying to create the equivelant LINQ query from the below SQL example:

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

总会有一个a,b和c一起被AND所包围,并被一个OR包围.此模式可以出现n次.

There will always be an a, b, and c that will be AND'd together surrounded by an OR. This pattern can occur n amount of times.

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

The only solution I have found that work is using LINQ Union but the SQL generated isn't what I would like.

推荐答案

尝试实现 PredicateBuilder 类.

Try implementing the PredicateBuilder class.

那么也许您可以使用类似这样的东西:

Then perhaps you can use something like this:

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);

然后假定您的条件可枚举.根据需要进行修改以适应您的需求.

This then assumes your criteria is enumerable. Modify as you need to accommodate your needs.

这篇关于如何使用LINQ在多个OR中创建SQL嵌套AND的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆