framework ejemplo c# linq linq-to-entities entity-framework-4 group-by

c# - ejemplo - linq lambda group by



LINQ al grupo de Entidades por fallo usando.date (3)

Estoy tratando de hacer un grupo Linq solo en la parte de la fecha de un campo de fecha y hora.

Esta declaración de linq funciona pero se agrupa por fecha y hora.

var myQuery = from p in dbContext.Trends group p by p.UpdateDateTime into g select new { k = g.Key, ud = g.Max(p => p.Amount) };

Cuando ejecuto esta instrucción para agrupar solo por la fecha, aparece el siguiente error

var myQuery = from p in dbContext.Trends group p by p.UpdateDateTime.Date into g //Added .Date on this line select new { k = g.Key, ud = g.Max(p => p.Amount) };

El tipo de miembro especificado ''Fecha'' no es compatible con LINQ to Entities. Solo se admiten los inicializadores, los miembros de entidad y las propiedades de navegación de entidad.

¿Cómo puedo hacer un grupo para la fecha y no la fecha y la hora?


No puede usar DateTime.Date en una consulta de Linq-to-Entities. Puede agrupar por los campos explícitamente o crear un campo de Date en la base de datos. (Tuve el mismo problema: utilicé un campo de Date en la base de datos, nunca miré hacia atrás).


Posible solución here que sigue el patrón:

var q = from i in ABD.Listitem let dt = p.EffectiveDate group i by new { y = dt.Year, m = dt.Month, d = dt.Day} into g select g;

Por lo tanto, para su consulta [sin probar]:

var myQuery = from p in dbContext.Trends let updateDate = p.UpdateDateTime group p by new { y = updateDate.Year, m = updateDate.Month, d = updateDate.Day} into g select new { k = g.Key, ud = g.Max(p => p.Amount) };


Utilice el método EntityFunctions.TruncateTime :

var myQuery = from p in dbContext.Trends group p by EntityFunctions.TruncateTime(p.UpdateDateTime) into g select new { k = g.Key, ud = g.Max(p => p.Amount) };