DataTable отдельные строки по максимальному значению - PullRequest
0 голосов
/ 25 сентября 2018

Мне нужны разные значения только по X и Y, но с полем ID и строкой с максимальным значением P

Например, вот мой DataTable

ID    X       Y     P  

03    Str1    C1    10  
04    Str1    C1    5  
05    Str1    C1    1  
06    Str1    C1    2  
07    Str2    C1    25  
08    Str2    C1    4  
09    Str1    C2    411  
10    Str1    C2    2356  
11    Str2    C2    12  
12    Str2    C2    33  

Результат для вышеупомянутого DataTable должен бытьследующий.

ID    X       Y     P  

03    Str1    C1    10  
07    Str2    C1    25  
10    Str1    C2    2356  
12    Str2    C2    33  

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

dt.AsEnumerable (). OrderBy (row => row ["X"]). ThenByDescending (row => row ["Y"]). GroupBy (row => new {a = row ["X"], b = строка ["Y"]}). Select (group => group.First ()). CopyToDataTable ();

0 голосов
/ 25 сентября 2018
public class Table
    {
        public string ID { get; set; }
        public string X { get; set; }
        public string Y { get; set; }
        public int P { get; set; }
    }

List<Table> table = new List<Table>() {
                    new Table() { ID = "03", X = "Str1", Y = "C1", P = 10 },
                    new Table() { ID = "04", X = "Str1", Y = "C1", P = 5 },
                    new Table() { ID = "05", X = "Str1", Y = "C1", P = 1 },
                    new Table() { ID = "06", X = "Str1", Y = "C1", P = 2 },
                    new Table() { ID = "07", X = "Str2", Y = "C1", P = 25 },
                    new Table() { ID = "08", X = "Str2", Y = "C1", P = 4 },
                    new Table() { ID = "09", X = "Str1", Y = "C2", P = 411 },
                    new Table() { ID = "10", X = "Str1", Y = "C2", P = 2356 },
                    new Table() { ID = "11", X = "Str2", Y = "C2", P = 12 },
                    new Table() { ID = "12", X = "Str2", Y = "C2", P = 33 },
                };

            var ret = table.GroupBy(p => new { p.X, p.Y }).Select(i => new { Table = new Table() { X = i.Key.X, Y = i.Key.Y, P = i.Max(o => o.P) }, Items = i.Select(f => f) }).ToList();
            ret.ForEach(c => c.Table.ID = c.Items.First(i => i.P == c.Table.P).ID);

            var finalResult = ret.Select(x => x.Table).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...