【问题标题】:LINQ to Entities does not recognize the method 'Int32 GetMonth(System.DateTime)' methodLINQ to Entities 无法识别方法“Int32 GetMonth(System.DateTime)”方法
【发布时间】:2015-05-30 01:48:36
【问题描述】:

我想在PersianCalendar的特殊月份选择项目。

我使用这个 linq。

 var calendar = new PersianCalendar();
 var month = calendar.GetMonth(DateTime.Now);
 var referreds= _db.Referreds.Where(m => calendar.GetMonth(m.CreatedDateTime) == month);

但我得到错误

LINQ to Entities 无法识别方法 'Int32 GetMonth(System.DateTime)' 方法,并且该方法无法转换为存储表达式

如何在 linq 中选择特殊月份的项目??

【问题讨论】:

  • 一个linq查询必须能转换成sql查询(sql没有方法GetMonth()
  • 您可以使用 Month 属性轻松地从数据中获取月份,因为 LINQ to Entities 知道如何将其转换为 SQL。但是使用波斯(或任何其他)日历?您无法从中获得有效的 SQL。
  • 我使用PersianCalendar。并希望使用波斯日历的特殊月份来计算具有 CreatedDateTime 的项目。

标签: c# asp.net-mvc linq


【解决方案1】:

您不能直接在 LINQ to Entities 中使用 PersianCalendar(除其他原因外,因为底层数据库没有明确支持它)。什么会起作用:

  1. 使用 PersianCalendar.ToDateTime 计算一个月的第一天
  2. 计算下个月的第一天
  3. 使用这些值进行查询

    _db.Referreds.Where(m => m.CreatedDateTime >= firstDayOfMonth && m.CreatedDateTime

我在这里假设波斯历具有与公历相同的基本属性。如果没有,我相信 Jon Skeet 会介入纠正我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多