如何在LINQ中使用Math.X函数?

Whi*_*uit 3 linq entity-framework

我有一个简单的表(SQL服务器和EF6) Myvalues,列Id(双)

我正在尝试获取此表中所有值的自然对数的总和.我的LINQ声明是:

            var sum = db.Myvalues.Select(x => Math.Log(x.Value)).Sum();
Run Code Online (Sandbox Code Playgroud)

编译很好,但我得到一个RTE:

LINQ to Entities无法识别方法'Double Log(Double)'方法,并且此方法无法转换为商店表达式.

我做错了什么/我该如何解决这个问题?

FWIW,我可以直接对数据库执行以下SQL查询,这给了我正确的答案:

select exp(sum(LogCol)) from
    (select log(Myvalues.Value) as LogCol From Myvalues 
) results
Run Code Online (Sandbox Code Playgroud)

ken*_*n2k 5

LINQ尝试转换Math.Log为SQL命令,以便对DB执行它.

这不受支持.

  • 第一个解决方案(对于SQL Server)是使用现有的一个SqlFunctions.更具体地说,SqlFunctions.Log.

  • 另一种解决方案是检索您的数据库使用的所有项目.ToList(),并执行Math.Log与LINQ到对象(不LINQ到实体).