Linq Sum语法

时间:2017-12-15 19:50:14

标签: c# linq linqpad

我想我已经失去了理智。任何人都可以帮助解决这种语法有什么问题吗?

我希望对一个列进行简单的总结。 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>'不包含   '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()};

并收到此错误;

  

无效的匿名类型成员声明符。匿名类型成员必须   声明成员作业,简单名称或成员访问权。

Material_Location.On_Hand_Qty是SQL Server中的双重内容。

我的语法已经用完了。必须有一个我失踪的演员或类似的东西。如果你来长岛,我会贿赂啤酒。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

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

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具有RNG.c 1}}扩展方法。

答案 1 :(得分:2)

或者您可以使用:

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