我怎样才能获得一些长类型项目的总和......这是我的代码:
using (gEn myEntities = new gEn)
{
var load = (from items in myEntities.Orders
select items.PayO).DefaultIfEmpty(0).Sum();
}
但是 Sum 给了我 int...我还想知道 DefaultIfEmpty 方法在用于 long 类型时是否与 Sum 方法有任何冲突...提前感谢...
Sum
返回 select
中使用的表达式返回的任何类型(前提是它是定义的重载之一)。如果你想返回一个 long 则强制转换 items.PasO
:
var load = (from items in myEntities.Orders
select (long)(items.PayO)
)
.DefaultIfEmpty(0).Sum();
我也想知道DefaultIfEmpty方法在用于long类型时是否与Sum方法有冲突
不,
DefaultIfEmpty
适用于任何类型,包括long
。只要该类型存在 Sum
重载,它就可以正常工作。
如果
Sum()
返回 int
,那是因为这是您集合的数据类型。所有这些 LINQ to Object 方法都是通用的。不,DefaultIfEmpty
不会有任何副作用。如果集合中没有项目,它只会给你 0,然后 Sum
将处理结果,这将是一个 IEnumerable<int>
,其中单个项目的值为 0。
我只是假设您在这里使用 EF。如果是这种情况,您需要在检索数据后进行强制转换,或者更改 C# 端的模型,使其具有
long
。您可能还想检查该表的数据类型是什么,因为如果您从数据源生成 C# 模型并且它使用 int32,那么您的表也可能具有这种类型。