实体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);
但相同,
我怎么解决这个问题?
错误信息告诉您,不支持DateTime
的ToString
方法。
由于您只是试图确定日期的月份和年份是否与给定值匹配,因此您可以只比较实际的月份和年份,而不是试图获得包含您比较的月份和年份的字符串。
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);