实体框架Where子句中的谓词列表

时间:2016-05-03 15:14:28

标签: c# entity-framework linq linq-to-entities predicate

List<System.Linq.Expressions.Expression<Func<MyType, bool>>> lstPredicates = new List<System.Linq.Expressions.Expression<Func<MyType, bool>>>();

foreach (MyType myAccount in lstMyType)
{
    System.Linq.Expressions.Expression<Func<MyType, bool>> predicate = 
        t => t.Account == myAccount.Account && t.Branch == myAccount.Branch;
    lstPredicates.Add(predicate);
}

lstTransactions = Context.MyTrans
   .Where(lstPredicates)
   .ToList();

我试图只在MyTrans表中运行一次查找,所以我正在建立一个谓词列表。我想检查事务中存在任何帐户和分支组合的列表中的事务。

即。我正在尝试生成像

这样的谓词
predicate = t => 
    (t.Account == 123 && t.Branch == London) 
    || (t.Account == 433 && t.Branch == Manchester)
    ||...

1 个答案:

答案 0 :(得分:0)

您可以使用Linqkit库。使用PredicateBuilder,您可以执行以下操作:

 var predicate = PredicateBuilder.False<MyType>();

 foreach (MyType myAccount in lstMyType)
 {
   predicate = predicate.Or (
        t => t.Account == myAccount.Account && t.Branch == myAccount.Branch);
 }

var query= Context.MyTrans.AsExpandable().Where(predicate);