如果我有一个poco类
public class Entry
{
public double Quantity { get; set; }
public decimal Cost{ get; set; }
}
如何使用类似
的Linq查询对它们进行算术运算context.Entries.Sum(e => (decimal)e.Quantity * e.Cost);
我无法将类型为'System.Double'的对象强制转换为'System.Decimal'
编辑:我已将十进制转换为双精度并且有效。
context.Entries.Sum(e => e.Quantity * (double)e.Cost);
答案 0 :(得分:3)
实体框架表明它不支持您想要的转换。要获取原始查询,您可以进行以下更改:
context.Entries
.AsEnumerable() // perform rest of work in memory
.Sum(e => (decimal)e.Quantity * e.Cost);
答案 1 :(得分:0)
您可以使用Convert.ToDecimal()
context.Entries.Sum(d => Convert.ToDecimal(d.Quantity)*d.Cost)
根据Tetsuya Yamamoto的说明进行编辑,如果您没有使用可录制的收藏品
context.Entries.ToList().Sum(d => Convert.ToDecimal(d.Quantity)*d.Cost)
答案 2 :(得分:0)
如果你坚持在数据库端执行所有计算并且你在使用转换时遇到问题,你可以使用SqlFunctions
类的静态方法,但当然它会有性能开销:
var result = context.Entries
.Sum(x => SqlFunctions.Exp(SqlFunctions.Log(x.Quantity) + SqlFunctions.Log(x.Cost)));
说明:e ^(ln(数量)+ ln(成本))= e ^(ln(数量*成本))=数量* 成本
或者您可以尝试手动编写查询:
var result = context.Database
.SqlQuery<decimal>("select sum(Quantity * Cost) from dbo.Entries)").FirstOrDefault();