LINQ to Entities无法识别该方法?

时间:2015-06-10 13:33:59

标签: c# entity-framework

var tmp = productDBSet.Where(x => x.lastUpdate >= DateTime.MinValue && x.lastUpdate.Value.ToString("MM/yyyy") == curMonth).Select(x => x.ID);

当我运行上面的代码时,我收到此错误消息:

  

LINQ to Entities无法识别方法'System.String ToString(System.String)'方法,而且此方法无法翻译   进入商店表达。

我也试过了,

var tmp = productDBSet.Where(x => x.lastUpdate >= DateTime.MinValue && x.lastUpdate.Value.ToString("MM/yyyy") == curMonth).ToList().Select(x => x.ID);

但同样,

我该如何解决?

3 个答案:

答案 0 :(得分:3)

正如错误消息告诉您的那样,ToString DateTime方法不受支持。

由于您只是想确定日期的月份和年份是否与给定值匹配,您只需比较实际的月份和年份,而不是尝试获取包含您的月份和年份的字符串与。比较。

x.lastUpdate.Value.Year == yearToCompareWith && 
    x.lastUpdate.Value.Month = monthToCompareWith

答案 1 :(得分:2)

您不能在Linq to Entities中使用ToString()。尝试这样的事情(我假设x.lastUpdate的类型为" DateTime"):

x.lastUpdate.Month == curMonth && x.lastUpdate.Year == curYear

发生这种情况,因为LINQ to Entities被转换为SQL查询,因此无法识别方法ToString。

答案 2 :(得分:1)

您不能在linq查询中使用扩展方法,因为这些方法无法转换为等效的Sql查询。您可以使用以下linq:

var tmp = productDBSet.Where(x => x.lastUpdate >= DateTime.MinValue && x.lastUpdate.Month == curMonth && x.lastUpdate.Year == curYear).Select(x => x.ID);