Pregunta ¿Cómo obtengo la fila MAX con un GROUP BY en la consulta LINQ?


Estoy buscando un camino en LINQ para que coincida con la siguiente consulta SQL.

Select max(uid) as uid, Serial_Number from Table Group BY Serial_Number

Realmente buscando algo de ayuda en este caso. La consulta anterior obtiene el máximo uso de cada número de serie debido a la Group By Sintaxis.


73
2017-10-01 14:11


origen


Respuestas:


        using (DataContext dc = new DataContext())
        {
            var q = from t in dc.TableTests
                    group t by t.SerialNumber
                        into g
                        select new
                        {
                            SerialNumber = g.Key,
                            uid = (from t2 in g select t2.uid).Max()
                        };
        }

80
2017-10-01 14:34



var q = from s in db.Serials
        group s by s.Serial_Number into g
        select new {Serial_Number = g.Key, MaxUid = g.Max(s => s.uid) }

60
2017-10-01 14:37



Revisé la respuesta de DamienG en LinqPad. En lugar de

g.Group.Max(s => s.uid)

debiera ser

g.Max(s => s.uid)

¡Gracias!


21
2017-07-24 12:24



En forma de cadena de métodos:

db.Serials.GroupBy(i => i.Serial_Number).Select(g => new
    {
        Serial_Number = g.Key,
        uid = g.Max(row => row.uid)
    });

15
2017-08-21 17:48



Las respuestas son correctas si solo requiere esos dos campos, pero para un objeto más complejo, tal vez este enfoque podría ser útil:

from x in db.Serials 
group x by x.Serial_Number into g 
orderby g.Key 
select g.OrderByDescending(z => z.uid)
.FirstOrDefault()

... esto evitará el "seleccionar nuevo"


5
2018-02-24 12:50