我使用Dapper从SQL查询中得到IEnumerable<dynamic>
,我想在IEnumerable
中将动态对象的两个属性的乘积加在一起。
我试过了:
decimal total = orderDetails.Aggregate((workingTotal, detail) =>
workingTotal + (detail.quantity * detail.unitPrice));
但是返回一个无法转换为小数的object
。
答案 0 :(得分:2)
我会使用Sum
代替Aggregate
:
decimal total = orderDetails.Sum(x => (decimal) (x.quantity * x.unitPrice));
根据你的具体情况而定,我可以想象这可能在没有任何演员表的情况下工作,或者需要更多的演员阵容......用dynamic
来判断并不总是很容易。
答案 1 :(得分:1)
编译器不知道detail.quantity
和detail.unitPrice
的类型,因此您需要强制转换它们。
此外,您需要another Aggregate
overload,其中一个具有种子值:
decimal total = orderDetails.Aggregate((decimal)0, (workingTotal, detail) =>
workingTotal + ((decimal)detail.quantity * (decimal)detail.unitPrice));
当然,您可以更轻松地使用Sum
代替Aggregate
。
答案 2 :(得分:0)
由于您正在使用动态,编译器不知道detail.quantity
等是什么。因此,您需要明确地将其转换为decimal
。
decimal total = (decimal)orderDetails.Aggregate((workingTotal, detail) =>
workingTotal + (detail.quantity * detail.unitPrice));