LINQ 中长类型的求和方法

问题描述 投票:0回答:2

我怎样才能获得一些长类型项目的总和......这是我的代码:

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

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

c# linq
2个回答
15
投票

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


3
投票

如果

Sum()
返回
int
,那是因为这是您集合的数据类型。所有这些 LINQ to Object 方法都是通用的。不,
DefaultIfEmpty
不会有任何副作用。如果集合中没有项目,它只会给你 0,然后
Sum
将处理结果,这将是一个
IEnumerable<int>
,其中单个项目的值为 0。

我只是假设您在这里使用 EF。如果是这种情况,您需要在检索数据后进行强制转换,或者更改 C# 端的模型,使其具有

long
。您可能还想检查该表的数据类型是什么,因为如果您从数据源生成 C# 模型并且它使用 int32,那么您的表也可能具有这种类型。

© www.soinside.com 2019 - 2024. All rights reserved.