Linq等价于嵌套条件的Where子句

本文关键字:Where 子句 条件 等价于 嵌套 Linq | 更新日期: 2023-09-27 18:05:21

SQL语句像这样:

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

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

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

Linq等价于嵌套条件的Where子句

IEnumerable使用LINQ扩展方法:

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

如果你正在使用实体框架,你可以从你的表中得到这样的过滤结果:

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

如果你正在使用实体框架,并且你有一个具有这些属性的实体,你可以使用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')");

就像没有AND/OR的特定组合一样。只要在必要时使用括号。

var query = from table in tables //or whatever your IEnumerable set is if you have one
where table.column1 == value || (table.column2 == value && table.column3 == value)
select table