如何在EntityFramework中按DateTime.Date进行分组

ale*_*mac 4 c# linq entity-framework entity-framework-6

我有一个设备型号:

public class DeviceModel
{
    public DateTime Added { get;set; }
}
Run Code Online (Sandbox Code Playgroud)

我想选择按Added日期分组的设备数量(不是日期和时间,而只是日期).我当前的实现无效,因为linq无法转换DateTime.Date为sql:

var result = (
    from device in DevicesRepository.GetAll()
    group device by new { Date = device.Added.Date } into g
    select new
        {
            Date = g.Key.Date,
            Count = g.Count()
        }
    ).OrderBy(nda => nda.Date);
Run Code Online (Sandbox Code Playgroud)

如何更改此查询以使其工作?

vol*_*pav 11

好吧,根据这个 MSDN文档,DateLINQ to SQL支持属性,我假设Entity Framework也支持它.

无论如何,尝试这个查询(注意我正在使用TruncateTime方法,以避免重复解析日期):

var result = from device in
                 (
                     from d in DevicesRepository.GetAll()
                     select new 
                     { 
                         Device = d, 
                         AddedDate = EntityFunctions.TruncateTime(d.Added) 
                     }
                 )
             orderby device.AddedDate
             group device by device.AddedDate into g
             select new
             {
                 Date = g.Key,
                 Count = g.Count()
             };
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 不幸的是,EF6不支持日期.关于EntityFunctions,这个类已经过时了,我使用的是DbFunctions.但是,这个解决方案有效.谢谢. (3认同)