Как группировать DateTime.Date в EntityFramework

c# entity-framework entity-framework-6 linq

Вопрос

У меня есть модель устройства:

public class DeviceModel
{
    public DateTime Added { get;set; }
}

И я хочу выбрать количество устройств, сгруппированных по 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);

Как изменить этот запрос, чтобы он работал?

Принятый ответ

Ну, в соответствии с этим документом MSDN свойство Date поддерживается LINQ 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()
             };

Надеюсь это поможет.


Популярные ответы

Использовать EntityFunctions.TruncateTime

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


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему