if-else通过where子句c#中的linq-to-sql查询等效

Dar*_*rcy 3 c# asp.net-mvc where-clause linq-to-sql

基本上我想在我的linq to sql语句中有一个if-else语句.

var query = from d in database
            if(x == y) {
                where d.Attr = x
            }
            else {
                 where d.Attr = y
            }
            select d;
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Fra*_*ger 8

假设,你的意思==,而不是=:

from d in database
where (x == y && d.Attr == x) ||
      (x != y && d.Attr == y)
select d;
Run Code Online (Sandbox Code Playgroud)


tva*_*son 7

这不是一样的

var query = from d in database
            where d.Attr == y
            select d;
Run Code Online (Sandbox Code Playgroud)

您可以使用where子句中的简单条件处理您的情况(或类似的,更现实的情况).对于更复杂的查询,您可以使用扩展方法来构建非常容易实现条件的查询,或使用PredicateBuilder创建任意复杂的条件.

var query = db.Table;
if (x == y)
{
   query = query.Where( d.Attr == z );
}
else
{
   query = query.Where( d.Attr == t );
}

var predicate = PredicateBuilder.True<Foo>()
                                .And( f => f.Attr == y )
                                .And( f => f.Attr == x )
                                .Or( f => f.Attr == z );
var query = db.Foo.Where( predicate );
Run Code Online (Sandbox Code Playgroud)