Я пытаюсь выяснить, как работают предикаты. У меня есть фрагмент кода, где всегда будет поставляться один параметр, но может быть до 5 различных параметров.LinqKit Predicates
Если я попробовать этот способ
var predicate = PredicateBuilder.False<Data.AccountAllocation>();
if (startDate.HasValue)
predicate = predicate.And(p => p.DateEntered >= startDate);
if (endDate.HasValue)
predicate = predicate.And(p => p.DateEntered <= endDate);
if (allocationTypeId.HasValue)
predicate = predicate.And(p => p.AllocationTypeID == allocationTypeId);
if (allocationStatusID.HasValue)
predicate = predicate.And(p => p.AllocationStatusTypeID == allocationStatusID);
var accountAllocation = await db.AccountAllocations.AsExpandable().Where(predicate).ToListAsync();
return accountAllocation;
Он ничего не возвращает еще, если я пишу это так
var predicate = PredicateBuilder.False<Data.AccountAllocation>();
if (accountId > 0)
predicate = predicate.Or(p => p.AccountID == accountId);
if (startDate.HasValue)
predicate = predicate.And(p => p.DateEntered >= startDate);
if (endDate.HasValue)
predicate = predicate.And(p => p.DateEntered <= endDate);
if (allocationTypeId.HasValue)
predicate = predicate.And(p => p.AllocationTypeID == allocationTypeId);
if (allocationStatusID.HasValue)
predicate = predicate.And(p => p.AllocationStatusTypeID == allocationStatusID);
var accountAllocation = await db.AccountAllocations.AsExpandable().Where(predicate).ToListAsync();
return accountAllocation;
Он работает должным образом. Если я изменил первый предикат, учетная запись, от .Or до. И это не сработает.
.Или всегда кажется, бежит, но если я ставлю .Или для всех из них дата возвращается не правильно, так как она должна быть .И
Я пытаюсь выяснить, как получить эту работу потому что будет время, когда все параметры являются необязательными. и я не смогу использовать .Or, в чем секрет получения. И работать независимо от того, сколько параметров добавлено.