LINQ求和语法

zkure5ic  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(196)

我想对一个列进行简单的求和。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中的双精度浮点数。
我的语法快用完了。一定是我漏掉了一个演员阵容之类的。有什么想法吗?

kuarbcqp

kuarbcqp1#

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

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_Qty是一个double,而不是一个IEnumerable<T>,它有Sum扩展方法。

b4lqfgs4

b4lqfgs42#

或者您可以用途:

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

相关问题