9

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

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

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

4

2 回答 2

14

Sum返回返回中使用的表达式的任何类型select(前提是它是定义的重载之一)。如果你想返回一个 long then cast items.PasO

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

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

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

于 2013-11-07T23:04:21.717 回答
3

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

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

于 2013-11-07T23:05:12.283 回答