我试图总结一个nvarchar(7)
类型的列,我需要先将数据转换为decimal(18, 7)
。
我使用了这个LINQ查询:
var Data = queryBase.Select(q => new { totalVol = q.Collection.Sum(c => Convert.ToDecimal(c.Volume) }).FirstOrDefault();
但是我得到了一个例外
LINQ to Entities无法识别方法' System.Decimal ToDecimal(System.String)'方法...
非常感谢任何帮助。
答案 0 :(得分:4)
错误很清楚。 EF未编程为将Convert.ToDecimal
调用转换为SQL。
一些选项:
ExecuteQuery
答案 1 :(得分:1)
您可以在执行Cast<double>
之前使用Sum
如果数据库无法转换字符串,则会抛出异常
var Data =
queryBase.Select(q =>
new
{
totalVol = q.Collection
.Select(c => c.Volume)
.Cast<double>()
.Sum()
}
).FirstOrDefault();
答案 2 :(得分:0)
由于Convert.ToDecimal必须转换为SQL,因此EF不知道如何操作。
所以,首先执行queryBase.ToList()
(这将执行SQL,所有数据都在内存中,作为对象)。
要最小化检索到的数据的大小,请执行以下操作:queryBase.Select(/*here filter the string field*/).ToList().
然后,使用Convert
或Decimal.Parse
答案 3 :(得分:0)
尝试这样的事情:
var Data = queryBase.Select(c =>c.Volume).AsEnumerable().Sum(d => Convert.ToDecimal(d.Volume));