使用LINQ to SQL对WCF服务请求进行分组依据和求和时的“值不能为空”

时间:2012-10-21 15:41:43

标签: c# wcf linq linq-to-sql

我正在尝试使用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>

你能看到的任何我遗失的东西?感谢。

1 个答案:

答案 0 :(得分:3)

可能少数订单的r.Price为空,因此请使用Sum(r => r.Price ?? 0)。但是在不知道你的数据的情况下这是一个猜测。

修改 很明显,我忽略了它:你试图将IEnumerable的匿名类型转换为List<TopOrders>,这是不可能的。但是如果演员表无效,as运算符会生成null。所以query本身就是null!删除强制转换,或创建TopOrder而不是匿名类型。