不能使用匿名类型的sum

时间:2019-08-02 14:32:50

标签: c# linq

我不能在LINQ中使用Sum()函数。

var results = _resultTable.AsEnumerable()
           .Select(x => new
            {
                AccountId = x["AccountID"],
                SubAccountId = x["SubAccount"],
                Amount = x["Amount"]
            })
            .GroupBy(s => new { s.AccountId, s.SubAccountId })
            .Select(x => new
            {
                x.Key.AccountId,
                x.Key.SubAccountId,
                TotalAmount = x.Sum(g => g.Amount)
            });

我无法编译出错误的代码

  

无法将类型'object'隐式转换为'long?'。一个明确的   转换存在(您是否缺少演员表?)

  

无法将lambda表达式转换为预期的委托类型,因为   块中的某些返回类型不是隐式可转换的   委托返回类型

1 个答案:

答案 0 :(得分:4)

我认为那是Linq-To-DataTable,并且您没有将对象转换为正确的类型。您不能Sum个对象。因此,您需要类似以下内容(请注意DataRow.Field<int>(..)):

.Select(x => new
        {
            AccountId = x["AccountID"],     // you should also cast
            SubAccountId = x["SubAccount"], // you should also cast
            Amount = x.Field<int>("Amount") // int you can sum, Object not
        })
        // rest

您也可以在结尾处进行投射,但是我不希望以后再搞乱,最好防止它:

// ...
.Select(grp => new
        {
            grp.Key.AccountId,
            grp.Key.SubAccountId,
            TotalAmount = grp.Sum(x => (int)x.Amount)
        });