实体LINQ不识别该方法

本文关键字:方法 识别 LINQ 实体 | 更新日期: 2023-09-27 17:55:04

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)'方法,此方法无法翻译

Also I tried,

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

但相同,

我怎么解决这个问题?

实体LINQ不识别该方法

错误信息告诉您,不支持DateTimeToString方法。

由于您只是试图确定日期的月份和年份是否与给定值匹配,因此您可以只比较实际的月份和年份,而不是试图获得包含您比较的月份和年份的字符串。

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

在Linq to Entities中不能使用ToString()。尝试这样做(我假设x.t lastupdate的类型是"DateTime"):

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

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

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

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