在线等!C#Linq问题求教!
雪狐 2014-10-27 11:50:33 需求是这样:我有一个List<A>对象,A类中有Quantity和OrderDate字段,我现在要对符合日期的Quantity字段求和,比如:我要对OrderDate 在2014-10月的订单的销售量求和,那么其Linq语句简单的表示法为:list.Where(x => x.OrderDate >= new Date(2014,10,1) && x.OrderDate <= new Date(2014-10-31).Sum(x => x.Quantity),对2014-10月有数据的情况下,其结果没有问题。现在的要求是:如果2014-10月份没有数据,其结果要显示“--”,注意:与0不一样。
现在的做法是我先any方法判断是否有数据,然后再求和。如下:
if(list.Ayn(x => x.OrderDate >= new Date(2014,10,1) && x.OrderDate <= new Date(2014-10-31)){
sum = list.Where(x => x.OrderDate >= new Date(2014,10,1) && x.OrderDate <= new Date(2014-10-31).Sum(x => x.Quantity)
}
个人觉得这种写法性能比较低下。后来改成先where,然后对where的结果在求和这种方式:如下:
var query = list.where(x => x.OrderDate >= new Date(2014,10,1) && x.OrderDate <= new Date(2014-10-31);
if(query.any()){
sum = query.sum(x => x.Quantity);
}
改成这种写法后,Resharper报:Possible multiple enumeration of IEnumerable警告。
请问大神们,教小弟一个更好的写法,谢谢!