Есть ли недостаток в объединении нескольких Where
в LINQ вместо использования одного Where
с несколькими условиями?
Я спрашиваю, потому что использование нескольких Where
может помочь значительно снизить сложность и улучшить ремонтопригодность моего кода.
Рассмотрим следующий код, chargeList
- это List<Charge>
, который является источником BindingSource
:
IEnumerable<Charge> matchingCharges = chargeList;
if(!string.IsNullOrWhiteSpace(channelAbbr))
matchingCharges = matchingCharges
.Where(c => c.ChannelAbbreviation == channelAbbr);
if(deliveryNoteDate.HasValue)
matchingCharges = matchingCharges
.Where(c => c.ArrivalAt == deliveryNoteDate.Value);
if(chargeID.HasValue)
matchingCharges = matchingCharges
.Where(c => c.ChargeID == chargeID.Value);
Этот сжатый код будет обрабатывать все комбинации фильтров, ни одного, ни одного, ни одного.
В противном случае мне пришлось бы использовать if-else
и несколько условий в одном Where
.
Это лучшее, что приходит мне на ум:
// important to keep code readable:
bool filterChannel = !string.IsNullOrWhiteSpace(channelAbbr);
bool filterDate = deliveryNoteDate.HasValue;
bool filterID = chargeID.HasValue;
if(!filterChannel && !filterDate && !filterID)
{
// take all
matchingCharges = chargeList;
}
else
{
matchingCharges = chargeList
.Where(c =>
filterChannel ? c.ChannelAbbreviation == channelAbbr : true
&& filterDate ? c.ArrivalAt == deliveryNoteDate.Value : true
&& filterID ? c.ChargeID == chargeID.Value : true);
}
Итак, каковы различия между ними, являются ли они незначительными? Имеет ли поставщик LINQ?