【问题标题】:LINQ to Entities does not recognize the method 'System.DateTime ConvertShamsiToMiladi(System.String)' methodLINQ to Entities 无法识别方法“System.DateTime ConvertShamsiToMiladi(System.String)”方法
【发布时间】:2014-12-31 15:07:01
【问题描述】:

错误:LINQ to Entities 无法识别该方法 'System.DateTime ConvertShamsiToMiladi(System.String)' 方法,以及 此方法无法翻译成商店表达式

我该如何解决?

我的代码:

var _48hoursAgoDate = DateTime.Now.AddDays(-2);
var _48hoursAgoPayments =_paymentService.GetMany(d => d.Date.ConvertShamsiToMiladi() >= _48hoursAgoDate)

扩展方法:

public static DateTime ConvertShamsiToMiladi(this string source)
{
    var date = source.Split('/');
    return new DateTime(int.Parse(date[0]), int.Parse(date[1]), int.Parse(date[2]), new PersianCalendar());
}

【问题讨论】:

  • d.Date 不返回DateTime?因为ConvertShamsiToMiladistring 类型的扩展方法,而不是DateTime

标签: c# linq datetime


【解决方案1】:

您收到此消息是因为 Linq 不知道如何将您的方法转换为 SQL 您应该首先使用 .AsEnumerable() 将其转换为 Linq 到对象,它应该如下所示:

var _48hoursAgoPayments =_paymentService.AsEnumerable().GetMany(d => d.Date.ConvertShamsiToMiladi() >= _48hoursAgoDate)

问候,

【讨论】:

    【解决方案2】:

    使用 LINQ to Entities 将您的查询转换为 SQL,而ConvertShamsiToMiladi 未在 SQL 中实现。您可以使用适当的语句进行选择并在之后转换日期,或者在客户端进行整个选择,即使用_paymentService.AsEnumerable().GetMany(...)

    “LINQ to Entities 无法识别...”这里已经讨论过很多次了:
    LINQ to Entities does not recognize the method 'System.String ToBase64String(Byte[])' method,
    LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 2013-04-07
      • 2017-08-08
      相关资源
      最近更新 更多