Рассчитать номер строки по группе в linq и взять только те, у кого номер строки 1? - PullRequest
0 голосов
/ 24 января 2019

Каким будет аналог LINQ, чтобы получить номер строки для раздела и затем получить только те записи, у которых номер строки равен 1?

Вот SQL-код, который я хочу преобразовать в его реализацию LINQ:

select
   ROW_NUMBER () OVER (PARTITION BY TASKKEY  ORDER BY CREATEDON DESC) as rn
   ,pwt.*
from
   TaskClass pwt
where pwt.STATUS = 0

Вот LINQ, который я пробовал до сих пор, но он не дает правильного результата

            var output = Result.GroupBy(t => t.TaskKey)
            .SelectMany(g => g.Select((j, i) =>
                new
               {
                   //Rest of the fields 
                   ,
                   rn = i + 1 //Row number
               }

                )
            )
            .Where(e => e.rn == 0)
            .Select(
            y => new TaskClass
            {
                //Rest of the fields
            }

            ).OrderBy(o => o.Id )
            .ToList<TaskClass>()
            );

В двух словах, я хочу найти, какая запись из строк, имеющих такой же TaskKey, имеетпоследний созданный, но в чистом LINQ.

1 Ответ

0 голосов
/ 24 января 2019

Я не уверен, зачем вам нужны номера строк, но, если вы хотите различить с помощью TaksKey и получить последнюю запись:

var output = Result.GroupBy(a => a.TaskKey)
    .ToDictionary(a => a.Key, b => b.Value.OrderBy(CreatedOn).First());

То же с некоторым фильтром.

var output = Result.Where(a => a.STATUS == 0)
    .GroupBy(a => a.TaskKey)
    .ToDictionary(a => a.Key, b => b.Value.OrderBy(CreatedOn).First());

Я не проверял это, поэтому, пожалуйста, проверьте порядок даты, если он не подходит, просто используйте Last вместо First.

...