如何在 LINQ 中过滤先进后出记录
How To Filter First in Last Out record In LINQ
我有Data In List 是员工的进出信息。
Datetime User_id UserName Tna
--------------------------------------------------------------------------------
2022-03-15 08:30:23 01 John null
2022-03-15 09:43:40 01 John null
2022-03-15 10:16:52 01 John null
2022-03-15 13:45:23 01 John null
2022-03-15 15:38:23 01 John null
2022-03-15 17:36:23 01 John null
2022-03-15 08:31:23 02 Eva null
2022-03-15 10:16:52 02 Eva null
2022-03-15 13:45:23 02 Eva null
2022-03-15 15:38:23 02 Eva null
2022-03-15 17:30:23 02 Eva null
列表中的信息检索自 API。
我想知道如何过滤列表中的项目。首次入住和最后退房
通过按时间过滤,如何使用 LINQ 获得这样的输出?
Datetime User_id UserName Tna
--------------------------------------------------------------------------------
2022-03-15 08:30:23 01 John IN
2022-03-15 17:36:23 01 John OUT
2022-03-15 08:31:23 02 Eva IN
2022-03-15 17:30:23 02 Eva OUT
您可能想要按人分组,然后 select 每组的第一个和最后一个。
假设
每个人至少有一个进出入口。
伪代码
var result = lst.GroupBy(x => x.User_id)
.Select(g => g.OrderBy(x => x.Datetime))
.Select(g => new[] { g.First() }.Concat(new[] { g.Last() }));
我有Data In List 是员工的进出信息。
Datetime User_id UserName Tna
--------------------------------------------------------------------------------
2022-03-15 08:30:23 01 John null
2022-03-15 09:43:40 01 John null
2022-03-15 10:16:52 01 John null
2022-03-15 13:45:23 01 John null
2022-03-15 15:38:23 01 John null
2022-03-15 17:36:23 01 John null
2022-03-15 08:31:23 02 Eva null
2022-03-15 10:16:52 02 Eva null
2022-03-15 13:45:23 02 Eva null
2022-03-15 15:38:23 02 Eva null
2022-03-15 17:30:23 02 Eva null
列表中的信息检索自 API。
我想知道如何过滤列表中的项目。首次入住和最后退房 通过按时间过滤,如何使用 LINQ 获得这样的输出?
Datetime User_id UserName Tna
--------------------------------------------------------------------------------
2022-03-15 08:30:23 01 John IN
2022-03-15 17:36:23 01 John OUT
2022-03-15 08:31:23 02 Eva IN
2022-03-15 17:30:23 02 Eva OUT
您可能想要按人分组,然后 select 每组的第一个和最后一个。
假设
每个人至少有一个进出入口。
伪代码
var result = lst.GroupBy(x => x.User_id)
.Select(g => g.OrderBy(x => x.Datetime))
.Select(g => new[] { g.First() }.Concat(new[] { g.Last() }));