在 linq 中计算组的行号,只取行号为 1 的行号?
Calculate row number over group in linq and take only those with row number 1?
获取分区上的行号然后仅获取行号为 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>()
);
简而言之,我想从具有相同 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
。
获取分区上的行号然后仅获取行号为 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>()
);
简而言之,我想从具有相同 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
。