我想我已经失去了理智。任何人都可以帮助解决这种语法有什么问题吗?
我希望对一个列进行简单的总结。 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中的双重内容。
我的语法已经用完了。必须有一个我失踪的演员或类似的东西。如果你来长岛,我会贿赂啤酒。有什么想法吗?
答案 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_Qty
是double
而不是IEnumerable<T>
,其中Sum
具有RNG.c
1}}扩展方法。
答案 1 :(得分:2)
或者您可以使用:
var results = Material_Locations
.Where(q => q.Material == "3171784-18")
.Sum(q => q.On_Hand_Qty)