Linq Sum 语法

Linq Sum Syntax

我想我疯了。任何人都可以帮助解决此语法的问题吗?

我想对列进行简单求和。 SQL 将是;

Select sum(x1.On_Hand_Qty)
From Material_Location x1
Where x1.Material = '3171784-18'

我在 LINQ 中尝试过;

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

但是出现了这个错误;

'System.Linq.IQueryable<AnonymousType#1>' does not contain a definition for 'Sum' and the best extension method overload 'System.Linq.Queryable.Sum(System.Linq.IQueryable<int>)' has some invalid arguments

Instance argument: cannot convert from 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<int>'

我试过了;

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

得到了这个错误;

Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.

Material_Location.On_Hand_Qty 是 SQL 服务器中的双倍数。

我 运行 语法错误。一定有我缺少的演员表或类似的东西。如果你来长岛,我就用啤酒行贿。有什么想法吗?

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

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

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

第二个版本,您尝试 x1.On_Hand_Qty.Sum() 将无法工作,因为正如您所说,On_Hand_Qtydouble 而不是 IEnumerable<T> Sum 扩展方法。

或者您可以使用:

var results = Material_Locations
   .Where(q => q.Material == "3171784-18")
   .Sum(q => q.On_Hand_Qty)