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