我试图在LINQ查询中使用我的OrderBy子句中的计算值。
我得到的错误是:
DbArithmeticExpression参数必须具有数字公共类型。
我的模型看起来像这样:
public class PostModel
{
public int ID { get; set; }
public DateTime Created { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string FilePath { get; set; }
public float Rank { get; set; }
public UserProfile Creator { get; set; }
public bool ShowPost { get; set; }
public PostModel()
{
Created = DateTime.Now;
Rank = 0;
ShowPost = false;
}
}
我尝试使用此选择帖子:
var todaysDate = DateTime.Now.AddDays(-10);
var result = _database.Posts
.Where(p => p.ShowPost == true)
.OrderBy(x => ((float)x.Rank) - (((float)(x.Created - todaysDate).TotalDays)) / 2f)
.Skip(page * StaticVariables.ResponseDataPageSize)
.Take(StaticVariables.ResponseDataPageSize)
.Select(s => new
{
id = s.ID,
rank = s.Rank,
title = s.Title,
description = s.Description
}
);
导致错误的顺序。我首先想到的是我没有将所有变量都转换为相同类型,但添加(float)似乎没有帮助。
该代码的目的是使高排名的帖子随着时间的推移落在列表中,以允许显示更新的信息。
有什么想法吗?
答案 0 :(得分:1)
在LinqToEntity中使用EntityFunction:
EntityFunctions.DiffDays(todaysDate, x.Created)