2012-03-29 69 views
5

我试图定义按年份,按月份,按日期,按小时等分组的标准方法...实体框架。 SQL Group By到EF Group按

通过阅读一些SQL文档,它似乎是最有效的方法是使用:

GROUP BY dateadd(month, datediff(month, 0, CreatedDate), 0) 

注意 “月”, “年”,...

然后我试图复制这种使用:

.GroupBy(x => SqlFunctions.DateAdd("month", SqlFunctions.DateDiff("month", 0, x.Created), 0)) 

.GroupBy(x => EntityFunctions.AddMonths(EntityFunctions.DiffMonths(0, x.Created))) 

然而,这两种表达式都无法编译...

而且我不确定这是否可以这样做?

如何正确地复制EF中的SQL代码行?

回答

5

我不明白你为什么要用任何方式使用标准的sql,但是这可以使用LINQ轻松完成,它将更多标准,例如按照匿名类型分组:

.GroupBy(x => new 
       { 
        month = x.CreatedDate.Month, 
        year = x.CreatedDate.Year, 
        ... 
       }); 
+0

是的,我有这个工作。但如果我没有错误地使用我发布的东西有更好的表现,不是吗?我正在阅读以下内容:http://weblogs.sqlteam.com/jeffs/archive/2007/09/10/group-by-month-sql.aspx ... – 2012-03-29 14:00:50

+0

这是我试图找到一种方法使用EntityFunctions复制该SQL代码......并同时创建一个按年,按月,按天,按小时分组的标准方法......我只需将AddYears更改为AddMonths即可...... – 2012-03-29 14:03:54

+2

它没有任何性能优势。您链接的帖子只是表示它可以更轻松地在Sql中使用。我没有看到用Entity Framework这么做的好处。 .NET与Sql没有相同的限制。 – cadrell0 2012-03-29 14:12:44