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方法有任何冲突…提前感谢…

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重载就可以正常工作。

如果Sum()返回一个int那是因为那是集合的数据类型。 所有这些LINQ to Object方法都是通用的。 不, DefaultIfEmpty没有副作用。 如果集合中没有项目,那么它将给你0,然后Sum将使用一个IEnumberable的结果,其中一个项目的值为0。

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