C#得到不同和最大值

时间:2016-01-10 15:29:15

标签: c# linq max distinct

这是我的数据表

X       Y   P
Str1    C1  10
Str1    C1  5
Str1    C1  1
Str1    C1  2
Str2    C1  25
Str2    C1  4
Str1    C2  411
Str1    C2  2356
Str2    C2  12
Str2    C2  33

我正在尝试根据X和Y列获取不同的行,并使用linq到数据集获取P列的最大值

 X      Y   P
Str1    C1  10
Str2    C1  25
Str1    C2  2356
Str2    C2  33

-

            var query0 = (from row in tablo.AsEnumerable() 

        select new
        {
            X = row.Field<string>("X"),
            Y = row.Field<string>("Y"),

        }).Distinct();

我该怎么办? 感谢。

2 个答案:

答案 0 :(得分:4)

您需要GroupBy: -

var result = tablo.AsEnumerable().
                  .GroupBy(row => new 
                            { 
                               X= row.Field<string>("X"), 
                               Y = row.Field<string>("Y") 
                            })
                  .Select(x => new 
                              {
                                 X = x.Key.X,
                                 Y = x.Key.Y,
                                 P = x.Max(z => z.Field<int>("P"))
                              });

答案 1 :(得分:0)

您可以尝试这样的事情:

 var result =  tablo.AsEnumerable() 
                    .Select(row=> new
                    {
                       X = row.Field<string>("X"),
                       Y = row.Field<string>("Y"),
                       P = row.Filed<int>("P")
                    }).GroupBy(i=>new {X = i.X, Y = i.Y})
                      .Select(gr=>new{
                          X = gr.Key.X,
                          Y = gr.Key.Y
                          P = gr.Max(z => z.P)
                    });

基本上,我们首先声明一个无序类型对象的序列,它具有三个属性XYP。然后,我们根据XY按此顺序进行分组。最后,我们拿出每个组的最高价格。