如何获得长类型中某些项目的总和...这是mycode:
using (gEn myEntities = new gEn)
{
var load = (from items in myEntities.Orders
select items.PayO).DefaultIfEmpty(0).Sum();
}
但是Sum给了我int ...我也想知道当使用long类型时,DefaultIfEmpty方法是否与Sum方法有任何冲突...提前感谢...
答案 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,那么这可能就是您的表所具有的。