2009-11-20 107 views
5

我想直接从LINQ-to-Entities查询表达式获取格式化的日期字符串。Linq-to-Entities:格式选择查询表达式中的日期

nonBusinessDays = (from ac in db.AdminCalendar 
        where ac.DateTimeValue >= calendarStartDate && ac.DateTimeValue <= calendarEndDate && ac.IsBusinessDay == false 
        select ac.MonthValue + "/" + ac.DayOfMonth + "/" + ac.FullYear).ToList(); 

但是,我得到的folloinw错误消息: “无法转换类型'System.Nullable`1为键入‘System.Object的’LINQ到实体仅支持铸造实体数据模型的基本类型。 “

除了遍历结果集,还有什么办法可以做到吗? 谢谢! 安倍

回答

9

我找到了一个解决办法:

nonBusinessDays = (from dt in 
          (from ac in db.AdminCalendar 
          where ac.DateTimeValue >= calendarStartDate && ac.DateTimeValue <= calendarEndDate && ac.IsBusinessDay == false 
          select ac.DateTimeValue).ToList() 
        select string.Format("{0:M/d/yyyy}", dt)).ToList(); 
+1

您遇到的问题是,它的企图的ToString转化为有效的SQL执行在服务器上 - 然后它没有做到。嵌套查询意味着你正在分离无法从查询中完成的.ToString,因此它可以工作 – Murph 2009-11-21 13:24:28

+1

谢谢! 现在有道理; LINQ试图将函数映射到一个不存在的SQL函数。 我的解决方法是首先将数据获取到列表中并从那里处理列表。 – Abe 2009-12-02 16:54:54

+0

懒惰加载是罪魁祸首。 – 2013-01-23 22:26:53

0

试着改变你的选择要使用的ToString:

nonBusinessDays = (from ac in db.AdminCalendar 
        where ac.DateTimeValue >= calendarStartDate && ac.DateTimeValue <= calendarEndDate && ac.IsBusinessDay == false 
        select ac.DateTimeValue.ToString("MM/dd/yyyy")).ToList(); 
+0

不幸的是,你不能运行ToString方法;这里是我得到的异常: LINQ to Entities无法识别方法'System.String ToString(System.String)'方法,并且此方法无法转换为存储表达式。 – Abe 2009-11-20 23:36:07