LINQ 求和语法

Ber*_*unt 2 c# linq

我正在寻找对一列进行简单的求和。SQL 将是:

Select sum(x1.On_Hand_Qty)
From Material_Location x1
Where x1.Material = '3171784-18'
Run Code Online (Sandbox Code Playgroud)

在 LINQ 中我尝试过:

var results = (from x1 in Material_Locations
                where x1.Material == "3171784-18"
                select new {x1.On_Hand_Qty}).Sum();
Run Code Online (Sandbox Code Playgroud)

但得到这个错误:

'System.Linq.IQueryable<AnonymousType#1>'不包含 的定义,'Sum'并且最佳扩展方法重载 'System.Linq.Queryable.Sum(System.Linq.IQueryable<int>)'有一些无效参数

实例参数:无法从 转换 'System.Linq.IQueryable<AnonymousType#1>''System.Linq.IQueryable<int>'

我试过这个:

var results = from x1 in Material_Locations
                where x1.Material == "3171784-18"
                select new {x1.On_Hand_Qty.Sum()};
Run Code Online (Sandbox Code Playgroud)

并得到这个错误:

无效的匿名类型成员声明符。匿名类型成员必须使用成员赋值、简单名称或成员访问来声明。

Material_Location.On_Hand_Qty是 SQL Server 中的双精度。

我的语法已经用完了。一定有我缺少的演员或类似的东西。有任何想法吗?

Gil*_*een 5

不要投影匿名对象。只是:

var results = (from x1 in Material_Locations
               where x1.Material == "3171784-18"
               select x1.On_Hand_Qty).Sum();
Run Code Online (Sandbox Code Playgroud)

当您投影匿名对象 ( new {..}) 然后执行时,Sum编译器无法对项目求和 - 因为项目不是数值而是对象。这些对象不会覆盖+运算符,也不能隐式转换为数值。

您尝试的第二个版本将x1.On_Hand_Qty.Sum()不起作用,因为正如您所说,On_Hand_Qty是 adouble而不是IEnumerable<T>具有Sum扩展方法的 an 。