我正在尝试使用LINQ to SQL来汇总从WCF服务返回的结果集中的行。我可以使用LINQ进行基本选择,按顺序,进行过滤等。到目前为止一直都很好。
但是当我尝试分组By / Sum时,我从下面的查询中尝试Take(5)时收到错误消息“Value Can not Null”。 (results
是非null并且有1000 + s项,但是当我们尝试返回它时query
为null :)
编辑:我已删除了下面答案中提到的无效演员,而是将汇总结果选择为按订单编写的自定义类。现在页面运行没有错误 - 但是/ by的组不起作用....我只是得到结果中的前五个最高值,而不是按组加总。为什么呢?
var query = (from h in results
group h by h.Order into hh
select new TopOrders()
{
Order = hh.Key,
Total= hh.Sum(r => r.Price)
}).OrderByDescending(i => i.Total);
return query.Take(5).ToList();
我可以指出的唯一可能的问题是Order本身就是一个集合(OrderID,OrderName等),因此我尝试在hh.Key.Order.OrderID等上明确分组,但没有效果。< / p>
你能看到的任何我遗失的东西?感谢。
答案 0 :(得分:3)
可能少数订单的r.Price
为空,因此请使用Sum(r => r.Price ?? 0)
。但是在不知道你的数据的情况下这是一个猜测。
修改强>
很明显,我忽略了它:你试图将IEnumerable的匿名类型转换为List<TopOrders>
,这是不可能的。但是如果演员表无效,as
运算符会生成null
。所以query
本身就是null
!删除强制转换,或创建TopOrder
而不是匿名类型。