LINQ中长和类的求和方法

时间:2013-11-07 23:02:12

标签: c# linq

如何获得长类型中某些项目的总和...这是mycode:

using (gEn myEntities = new gEn)
{
var load = (from items in myEntities.Orders
select items.PayO).DefaultIfEmpty(0).Sum();
}

但是Sum给了我int ...我也想知道当使用long类型时,DefaultIfEmpty方法是否与Sum方法有任何冲突...提前感谢...

2 个答案:

答案 0 :(得分:11)

Sum返回select中使用的表达式返回的任何类型(假设它是已定义的重载之一)。如果你想返回一个long,那么转换items.PasO

var load = (from items in myEntities.Orders
select (long)(items.PayO)).DefaultIfEmpty(0).Sum();
  

我还想知道当使用long类型时,DefaultIfEmpty方法是否与Sum方法有任何冲突

不,DefaultIfEmpty适用于任何类型,包括long。只要该类型存在Sum重载,它就可以正常工作。

答案 1 :(得分:3)

如果Sum()返回int,那是因为这是您收藏的数据类型。所有这些LINQ to Object方法都是通用的。不,DefaultIfEmpty没有副作用。如果集合中没有任何项目,那么它只会给你0,那么Sum将会对IEnumberable<int>的结果产生影响,该结果将是一个具有单个项目的long值为0.

我只是假设你在这里使用EF。如果是这种情况,您需要在检索数据后进行转换,或者在C#端更改模型,使其具有{{1}}。您可能还想检查该表的数据类型是什么,因为如果您从数据源生成C#模型并且它使用的是int32,那么这可能就是您的表所具有的。