如何使用c#使用LINQ

时间:2016-09-13 21:13:08

标签: c# sql linq

我试图总结一个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)'方法...

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:4)

错误很清楚。 EF未编程为将Convert.ToDecimal调用转换为SQL。

一些选项:

  • 手动编写等效的SQL并使用ExecuteQuery
  • 进行调用
  • 在数据顶部创建一个视图,将字符串转换为数字并查询。
  • 将所有数据拉入内存并转换为Linq-to-Objects中的转换/求和。

答案 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().

然后,使用ConvertDecimal.Parse

进行总和

答案 3 :(得分:0)

尝试这样的事情:

var Data = queryBase.Select(c =>c.Volume).AsEnumerable().Sum(d => Convert.ToDecimal(d.Volume));