LINQ to Entities不能识别'System方法.字符串ToString () & # 39;方法转换
本文关键字:方法 ToString 转换 字符串 System Entities to 不能 识别 LINQ | 更新日期: 2023-09-27 18:11:05
我正试图从一个可空的DateTime中获得一周的日期,然后加入天数列表。
我的解决方案是首先将其转换为DateTime,但Linq to Entities不喜欢它。
LIST是一个IEnumerable<string>
建议吗?
var result = from X in model.X
where X.StartDate.HasValue
join item in LIST on
Convert.ToDateTime(X.StartDate).DayOfWeek.ToString() equals item
select X;
转换为方法链没有帮助:
var result = model.X.Where(x => x.StartDate.HasValue).Join(LIST,x => Convert.ToDateTime(x.StartDate).DayOfWeek.ToString(), item => item, (x, item) => x);
var result = from X in model.X
where X.StartDate.HasValue &&
List.Contains(SqlFunctions.DatePart("weekday", X.StartDate))
select X;
weekday
返回一个int
,所以你应该有一个整数列表,而不是字符串
如果在转换发生之前使用.ToList()
,这将有效。实体4.0将值转换为DateTime
var result = model.X.Where(x => x.StartDate.HasValue).ToList().Join(LIST,x => Convert.ToDateTime(x.StartDate).DayOfWeek.ToString(), item => item, (x, item) => x);
. tostring()不被Linq-To-Entities支持,其他一些扩展方法也不支持。
简短(可能在某种程度上不准确)的原因是,上面上下文中的。tostring()被发送到Sql Server以在查询中运行。Sql Server不知道。tostring()是什么,所以当Sql Server的查询解析器试图执行它时,它会失败。
,供参考http://msdn.microsoft.com/en-us/library/bb738550.aspx
EDIT:请勿使用此代码。这里留给你的是不能工作的地方,所以你可以看到Chris的原因和如何解决。
未经测试:
var result = from X in model.X
where ((X.StartDate != null) && X.StartDate.HasValue)
join item in LIST on
Convert.ToDateTime(X.StartDate).DayOfWeek.ToString() equals item
select X;
如果您已经将StartDate
声明为Nullable
字段,那么接下来您应该检查空值