Tengo una lista con fecha y Fileno como valores. Necesito encontrar la fecha duplicada y, en base a eso, encontrar el número de archivo más alto. Luego, agregue ese par de valores clave y el par distinto a la lista final. El resultado debería ser el que se muestra a continuación. Puedo obtener la fecha duplicada, pero ¿cómo comparar las fechas duplicadas y encontrar el número de archivo más alto?

Key  Date       Fileno
 1  10/8/1980   1234
 2  10/8/1980   1345
 3  8/6/1970    4567

Resultado

 2  10/8/1980   1345
 3  8/6/1970    4567

Código

var list = new List<valuepair>();
list.Add(new valuepair {no=key,comdate=date,filnum=fileno})
Var dup= list.GroupBy(x => comdate.Value).Where(x => comdate.Count() > 1)
0
Anju 7 dic. 2020 a las 20:01

2 respuestas

La mejor respuesta

Prueba esto:

var result = data
    .GroupBy(
        i => i.Date,
        (key, group) => group.Single(x => x.Fileno == group.Max(y => y.Fileno)))
    .ToList();
0
jrck 7 dic. 2020 a las 17:25

Ya casi ha terminado, excepto que el código que ha publicado no es compilable (!). Solo necesita tomar el elemento con el "filnum" más alto de cada grupo:

var list = new List<valuepair>();
list.Add(new valuepair { no=1, comdate="10/8/1980", filnum=1234 });
list.Add(new valuepair { no=2, comdate="10/8/1980", filnum=1345 });
list.Add(new valuepair { no=3, comdate="8/6/1970", filnum=4567 });

var listWithoutDuplicates = list.GroupBy(x => x.comdate)
    // For each group (in which items have identical dates) take only
    // the one with the highest "filnum"
    .Select(group => group.OrderBy(x => x.filnum).First())
    .ToList();
4
Xerillio 7 dic. 2020 a las 17:08