我正在尝试使用Linq to Entities对一些文章进行排序。我正在使用System.Data.Objects.SqlClient.SqlFunctions。这是我想什么有:Linq-to-Entities SqlFunctions:如何从int转换为double?或小数?
this.Queryable = this.Queryable
.OrderByDescending(v => v.UpVote + SqlFunctions.Log10(
SqlFunctions.DateDiff("d", DateTime.Today, v.Created)));
然而,这不起作用,因为则DateDiff返回int?
和LOG10它可以是一个double?
或decimal?
。
我找不到在SqlFunctions中执行此操作的转换函数。我试着用1.0相乘,或铸造,但我得到以下错误:
System.Data.Entity.Core.EntityCommandExecutionException: An error occurred while reading from the store provider's data reader. See the inner exception for details. ---> System.Data.SqlClient.SqlException: An invalid floating point operation occurred.
如何从int?
转换double?
或decimal?
使用SqlFunctions来?
答:
基于Ocelot20的回应,我换周围的论点,每天添加到所创建的日子,所以它永远不会产生负或者0的输入,这是什么原因造成的错误。我还需要将UpVote加倍。这是工作版本的样子:
var date = DateTime.Today.AddDays(1);
this.Queryable = this.Queryable
.OrderByDescending(v => (double)v.UpVote - SqlFunctions.Log10(Math.Abs((double)
SqlFunctions.DateDiff("d", date, v.Created))));
谢谢你的回答,但是把它加倍是我已经尝试过的事情之一(参见我的笔记)。 Math.Abs也是如此。我试着切换它 - 同样的错误。 – gabnaim
查看我的更新。查询工作,所以它肯定是一个数据问题。在Linqpad中试试这些也是明智的,并且可以使用生成的SQL来更好地理解问题。 – Ocelot20
宾果 - 错误是今天创建的项目,其中Log10返回0.我添加了一天到今天,它的工作。谢谢! – gabnaim