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