C# 在linq中计算组上的行数,只取行数为1的行数?

C# 在linq中计算组上的行数,只取行数为1的行数?,c#,linq,sql-to-linq-conversion,C#,Linq,Sql To Linq Conversion,在分区上获取行号,然后只获取那些行号为1的记录的LINQ对应项是什么 下面是我要转换为其LINQ实现的SQL: select ROW_NUMBER () OVER (PARTITION BY TASKKEY ORDER BY CREATEDON DESC) as rn ,pwt.* from TaskClass pwt where pwt.STATUS = 0 这是我到目前为止尝试过的LINQ,但它没有给出正确的结果 var output = Res

在分区上获取行号,然后只获取那些行号为1的记录的LINQ对应项是什么

下面是我要转换为其LINQ实现的SQL:

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>()
            );
var output=Result.GroupBy(t=>t.TaskKey)
.SelectMany(g=>g.Select((j,i)=>
刚出现的
{
//其余的田地
,
rn=i+1//行数
}
)
)
。其中(e=>e.rn==0)
.选择(
y=>新任务类
{
//其余的田地
}
).OrderBy(o=>o.Id)
托利斯先生()
);

简而言之,我想从具有相同TaskKey的行中找出哪个条目具有最新的CreatedOn,但使用纯LINQ。

我不确定为什么需要行号,但如果希望通过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

,因此您希望
GroupBy
TaskKey,然后
OrderBy
CreatedOn,并使用
Last
one?@mjwills是的,最后一个与根据CreatedOn创建的最新版本相同。我想要从具有相同TaskKey的行中选择最新的条目CreatedOn@mjwills. 你是说最后一个()操作符。让我试一试。您应该将其添加为答案,以便在它起作用的情况下,我可以对其进行投票并将其标记为已接受的答案。@mjwills我仍然得到不正确的结果。你能用你推断的LINQ实现来回答吗?如果你提供一个示例输入和预期结果,你就更有可能让人们尝试一下。