una ultimo traer top seleccionar registro primer postgres obtener grupo consulta cada c# linq c#-4.0 linq-to-entities

c# - ultimo - traer el primer registro en postgresql



Cómo obtener el primer registro en cada grupo usando Linq (4)

Teniendo en cuenta los siguientes registros:

Id F1 F2 F3 ------------------------------------------------- 1 Nima 1990 10 2 Nima 1990 11 3 Nima 2000 12 4 John 2001 1 5 John 2002 2 6 Sara 2010 4

Quiero agrupar según el campo F1 y ordenar por Id y obtener todos los campos del primer registro del grupo similar a estos registros:

Id F1 F2 F3 ------------------------------------------------- 1 Nima 1990 10 4 John 2001 1 6 Sara 2010 4

¿Cómo puedo hacer esto usando linq?


Úselo para lograr lo que quiere. Luego, decida qué propiedades desea devolver.

yourList.OrderBy(l => l.Id).GroupBy(l => new { GroupName = l.F1}).Select(r => r.Key.GroupName)


La idea de @Alireza es totalmente correcta, pero debe tener en cuenta que al usar este código

var res = from element in list group element by element.F1 into groups select groups.OrderBy(p => p.F2).First();

que es similar a este código porque ordena la lista y luego hace la agrupación para obtener la primera fila de grupos

var res = (from element in list) .OrderBy(x => x.F2) .GroupBy(x => x.F1) .Select()

Ahora, si quieres hacer algo más complejo como tomar el mismo resultado de agrupación pero tomar el primer elemento de F2 y el último elemento de F3 o algo más personalizado, puedes hacerlo estudiando el código de abajo

var res = (from element in list) .GroupBy(x => x.F1) .Select(y => new { F1 = y.FirstOrDefault().F1; F2 = y.First().F2; F3 = y.Last().F3; });

Entonces obtendrás algo como

F1 F2 F3 ----------------------------------- Nima 1990 12 John 2001 2 Sara 2010 4


var res = from element in list group element by element.F1 into groups select groups.OrderBy(p => p.F2).First();


var result = input.GroupBy(x=>x.F1,(key,g)=>g.OrderBy(e=>e.F2).First());