LINQ to Entities无法识别方法' System.DateTime ConvertShamsiToMiladi(System.String)'方法

时间:2014-12-31 15:07:01

标签: c# linq datetime

  

错误: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());
}

2 个答案:

答案 0 :(得分:1)

你有这条消息,因为Linq doesent知道如何将你的方法转换为SQL你应该首先使用.AsEnumerable()将它转换为Linq对象它应该如下所示:

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

此致

答案 1 :(得分:0)

使用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