如何使用LINQ获得IEnumerable中两个属性的乘积的和?
本文关键字:属性 两个 获得 LINQ 何使用 IEnumerable | 更新日期: 2023-09-27 18:01:35
我有一个使用Dapper的SQL查询的IEnumerable<dynamic>
,我想将IEnumerable
中动态对象的两个属性的乘积加在一起。
I tried:
decimal total = orderDetails.Aggregate((workingTotal, detail) =>
workingTotal + (detail.quantity * detail.unitPrice));
,但返回的object
不能转换为小数
我将使用Sum
代替Aggregate
:
decimal total = orderDetails.Sum(x => (decimal) (x.quantity * x.unitPrice));
根据你的具体情况,我可以想象这可能不需要任何类型转换,或者需要更多类型转换…使用dynamic
并不总是很容易分辨。
编译器不知道detail.quantity
和detail.unitPrice
的类型,所以需要对它们进行强制类型转换。此外,您还需要另一个Aggregate
重载,其种子值为:
decimal total = orderDetails.Aggregate((decimal)0, (workingTotal, detail) =>
workingTotal + ((decimal)detail.quantity * (decimal)detail.unitPrice));
当然,您可以使用Sum
来代替Aggregate
,这更容易。
由于您正在使用动态,编译器不知道detail.quantity
等是什么。因此,您需要显式地将其强制转换为decimal
。
decimal total = (decimal)orderDetails.Aggregate((workingTotal, detail) =>
workingTotal + (detail.quantity * detail.unitPrice));