添加可选的where参数以查询基于linq查询

时间:2018-04-03 05:44:45

标签: c# linq

我正在尝试使用LINQ to SQL Where Clause Optional Criteria

中的答案

我喜欢我的linq使用基于查询的语法。不知道如何使用whereif。

我的查询看起来像这样

var result = (from tran in _ctx.Transactions where tran.Id == transactionId select tran);

有时投射

var result = (from tran in _ctx.Transactions where tran.Id == transactionId
     select new Abstract
           {
               tran.Date,
               tran.Key
           });

我可以使用方法语法

执行可选过滤器
var result = _ctx.Transactions
             .where(t=>t.Id == transactionId)
             .whereIf(tran.Dept!= "AllDept", x => x.Dept== deptName);

不确定如何在基于查询的linq查询中使用WhereIf。

1 个答案:

答案 0 :(得分:1)

阅读:Dynamic query with Linq

我建议使用PredicateBulder并为你的查询添加谓词,如下所示,这将使用变量谓词动态构建查询

var predicate = PredicateBuilder.True<Transaction>();  
predicate = predicate.And(t=>t.Id == transactionId);  
if (!string.IsNullOrEmpty(department))  
{  
    predicate = predicate.And(tran => tran.Dept!= "AllDept");  
}
var result = _ctx.Transactions.where(predicate);

Dynamically Composing Expression Predicates