使用带有EF的OrderBy子句中的计算值

时间:2014-02-02 11:00:30

标签: c# linq lambda entity-framework-5

我试图在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)似乎没有帮助。

该代码的目的是使高排名的帖子随着时间的推移落在列表中,以允许显示更新的信息。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在LinqToEntity中使用EntityFunction:

EntityFunctions.DiffDays(todaysDate, x.Created)