Come raggruppare per DateTime.Date in EntityFramework

Ho un modello di dispositivo:

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

E voglio selezionare il numero di dispositivi, raggruppati per data di Added ( non data e ora, ma solo data ). La mia attuale implementazione non è valida, perché linq non può tradurre DateTime.Date in 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); 

Come cambiare questa query per farlo funzionare?

Bene, secondo questo documento MSDN, la proprietà Date è supportata da LINQ su SQL e suppongo che Entity Framework supporti anche questo.

Ad ogni modo, prova questa query (nota che sto usando il metodo TruncateTime per evitare di risolvere ripetutamente la data):

 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() }; 

Spero che questo ti aiuti.

Utilizza 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);