LINQ: получить записи в списке с самыми большими значениями для свойства

1

Я не знаю, насколько это просто,

У меня есть объект вроде

public class ActionRecord
{
    public int RecID { get; set; }
    public string Action { get; set; }
    public string ActArea { get; set; }
    public int UserID { get; set; }
    public DateTime ActDate { get; set; }
}

Примеры данных в ActionRecord могут быть следующими:

----------------------------------------------------------------------
RecID      Action      ActArea      UserID      ActDate
---------------------------------------------------------------------
   1       Edit        Main 1 Item      5        2014-11-01 10:01:14
   2       Delete      Sub 1 Item       2        2014-11-01 14:22:58
   3       Add         Sub 5 Item       2        2014-11-01 15:16:03
   4       Add         Sub 6 Item       2        2014-11-01 15:48:32
   5       Edit        Main 1 Item      2        2014-11-01 16:04:50
   7       Edit        Main 2 Item      5        2014-11-01 16:19:03
   8       Delete      Main 2 Item      5        2014-11-01 16:38:49
   9       Add         Main 3 Item      2        2014-11-01 16:42:25
  10       Edit        Main 3 Item      3        2014-11-01 16:45:38

Мое требование состоит в том, что с помощью LINQ мне нужно отфильтровать данные, чтобы получить только последнее ПО для ActArea, вот как выглядят окончательные данные:

----------------------------------------------------------------------
RecID      Action      ActArea      UserID      ActDate
---------------------------------------------------------------------
  10       Edit        Main 3 Item      3        2014-11-01 16:45:38
   8       Delete      Main 2 Item      5        2014-11-01 16:38:49
   5       Edit        Main 1 Item      2        2014-11-01 16:04:50
   4       Add         Sub 6 Item       2        2014-11-01 15:48:32
   3       Add         Sub 5 Item       2        2014-11-01 15:16:03
   2       Delete      Sub 1 Item       2        2014-11-01 14:22:58
  • 1
    что ты пробовал? Разместите свой код и с конкретной проблемой, с которой вы столкнулись.
  • 0
    Я еще ничего не пробовал, не мог найти, что попробовать.
Теги:
linq

2 ответа

2
Лучший ответ

Вы можете сделать это с помощью GroupBy:

var res = dara.GroupBy(d=>d.ActArea)
    .Select(g=>g.OrderBydescending(a=>a.ActDate).First());
1

Это то, что я сделал бы:

var latest =
    from x in all
    group x by x.ActArea into gxs
    from gx in gxs
        .OrderByDescending(y => y.ActDate)
        .Take(1)
    select gx;

В результате я получаю:

Изображение 174551

Это соответствует требованию albiet, что оно не в том же порядке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню