我不能在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表达式转换为预期的委托类型,因为 块中的某些返回类型不是隐式可转换的 委托返回类型
答案 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)
});