如何在 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() }));