Список предикатов в Entity Framework Where предложение [duplicate]

На этот вопрос уже есть ответ здесь:

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 ответ

  1. Вы можете использовать библиотеку 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);