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);
但同样,
我该如何解决?
答案 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);