我想对一个列进行简单的求和。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条答案
按热度按时间kuarbcqp1#
不要投影匿名对象。只要:
当你投射匿名对象(
new {..}
),然后执行Sum
时,编译器无法对这些项求和--因为这些项不是数值而是对象。这些对象不会覆盖+
运算符,也不能隐式地转换为数值。第二个版本,你尝试
x1.On_Hand_Qty.Sum()
不会工作,就像你说的,On_Hand_Qty
是一个double
,而不是一个IEnumerable<T>
,它有Sum
扩展方法。b4lqfgs42#
或者您可以用途: