【发布时间】:2014-05-15 09:50:43
【问题描述】:
在 LINQ 中连接多个 Where 而不是在多个条件下使用单个 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);
这个简洁的代码将处理过滤器的所有组合,无,一,二,全部。
否则我必须在单个Where 中使用if-else 和多个条件。
这是我想到的最好的:
// 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 提供程序重要吗?
【问题讨论】:
-
我记得有多个推荐方法
-
@VladimirSachek 你建议的编辑作为评论会更好(这里是链接:stackoverflow.com/questions/6359980/proper-linq-where-clauses/…)