将带有日期的SQL语句转换为Linq-to-Sql以与EF4一起使用

时间:2011-01-24 21:18:00

标签: asp.net-mvc linq-to-sql entity-framework-4

我有以下SQL命令:

SELECT        CONVERT(varchar, Logged, 103) AS Visited, COUNT(ID) AS Totals
FROM            tblStats
GROUP BY CONVERT(varchar, Logged, 103)
ORDER BY Visited DESC

我想将其转换为可以与实体框架一起使用的L2S语句,但在处理日期时间类型时,我会遇到各种错误,具体取决于我如何尝试解决问题。

方法:

var results = from s in db.Stats
      group s by (s.Logged.Date.ToString()) into Grp
      select new { Day = Grp.Key, Total = Grp.Count() };

错误:

  

LINQ to Entities无法识别   方法'System.String ToString()'   方法,这个方法不能   翻译成商店表达。

方法:

var results = from s in db.Stats
              group s by (s.Logged.Date) into Grp
              select new { Day = Grp.Key, Total = Grp.Count() };

错误:

  

指定的类型成员'Date'是   LINQ to Entities不支持。   只有初始化者,实体成员和   实体导航属性是   支撑。

我需要什么语法才能使查询有效?

2 个答案:

答案 0 :(得分:1)

尝试使用EntityFunctions.TruncateTime方法:

var results = from s in db.Stats
              group s by EntityFunctions.TruncateTime(s.Logged) into Grp
              select new { Day = Grp.Key, Total = Grp.Count() };

答案 1 :(得分:0)

您需要Date中的s.Logged.Date部分吗?

你试过这个:

var results = from s in db.Stats
              group s by (s.Logged) into Grp
              select new { Day = Grp.Key, Total = Grp.Count() };

我假设Logged是属性(表中的列)。

编辑:你们是快速的方式。