Linq相当于具有嵌套条件的Where子句

时间:2015-07-29 20:43:27

标签: c# asp.net linq entity-framework

SQL语句是这样的:

Select * From Table
Where 
Column1 = 'A' OR
(Column2 = 'A' AND
 Column3 = 'A')

因此Column1可能等于'A',或者Column2和Column3的组合等于'A'将构成匹配。

我怎么能写一个linq语句来做同样的事情?

3 个答案:

答案 0 :(得分:3)

使用IEnumerable的LINQ扩展方法:

var result = collection.Where(x => x.Column1 = "A" || 
                                  (x.Column2 == "A" && x.Column3 == "A"));

如果您使用的是Entity Framework,则可以从表中获取过滤结果,如下所示:

using (var context = new MyDbContext())
{
    var result = cocontext.MyTable.Where(x => x.Column1 = "A" || 
                                             (x.Column2 == "A" && x.Column3 == "A"));    
}

答案 1 :(得分:1)

它与没有AND / OR的特定组合完全一样。只要在必要时使用括号。

static

答案 2 :(得分:1)

如果您使用Enity Framework并且您拥有具有这些属性的实体,则可以使用Linq to Entities执行大致相同的操作:

var query= from row in context.Table
           where row.Column1 == "A" || (row.Column2 == "A" && row.Column3 == "A")
           select row;

此外,如果您不想使用LINQ to Entities并且想要直接执行查询,则可以使用DbSet.SqlQuery方法:

var result=context.Table.SqlQuery("Select * From Table Where Column1 = 'A' OR (Column2 = 'A' AND  Column3 = 'A')");