Saltar al contenido

LINQ to SQL: GroupBy() y Max() para obtener el objeto con la última fecha

Este team de expertos luego de algunos días de investigación y de recopilar de datos, hemos dado con la solución, queremos que todo este artículo sea de utilidad en tu trabajo.

Solución:

Me pregunto si algo como:

var custsLastAccess = db.CustAccesses   
                    .Where(c.AccessReason.Length>0)
                    .GroupBy(c => c.CustID)
                    .Select(grp => new 
                      grp.Key,
                      LastAccess = grp
                         .OrderByDescending(x => x.AccessDate)
                         .Select(x => x.AccessDate)
                         .FirstOrDefault()
                    ).ToList();

también podrías intentar OrderBy() y Last()

Usando la sintaxis LINQ, que creo que se ve más limpia:

var custsLastAccess = from c in db.CustAccesses 
                      group c by c.CustID into grp
                      select grp.OrderByDescending(c => c.AccessDate).FirstOrDefault();

Aquí: esto usa max en lugar de OrderByDesc, por lo que debería ser más eficiente.

var subquery = from c in CustAccesses
            group c by c.CustID into g
            select new
            
                CustID = g.Key,
                AccessDate = g.Max(a => a.AccessDate)
            ;
var query = from c in CustAccesses
            join s in subquery 
              on c.CustID equals s.CustID
            where c.AccessDate == s.AccessDate
             && !string.IsNullOrEmpty(c.AccessReason)
            select c;

Si haces scroll puedes encontrar las anotaciones de otros creadores, tú igualmente tienes la habilidad dejar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *