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);

LINQ to Entities不能识别'System方法.字符串ToString () & # 39;方法转换

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字段,那么接下来您应该检查空值