我是 LinQ 技术的新手。我的程序生成操作(移动文件、删除文件等)并将每个操作的状态保存在数据库中。假设法规只是通过 (1) 或失败 (0)。虽然我的行动不成功,但我再试一次。对于每次试验,我在我的数据库中写了一行:

ID  ProcessedOn             ActionID  Description  Status
--- ----------------------- --------- ------------ ------
20  2011-05-20 10:45:01.440 24871     xxx          0
21  2011-05-20 10:45:09.080 24873     xxx          0
22  2011-05-20 11:00:01.993 24871     xxx          0
23  2011-05-20 11:00:10.477 24873     xxx          1
24  2011-05-20 11:15:08.127 24871     xxx          1

我想编写一个 LINQ 查询来检索 2 时刻之间每个 Action 的最新状态。这可能吗?

我已经写了这个:
 MyTable.Where(t => t.ProcessedOn >= start).Where(t => t.ProcessedOn <=
 stop).OrderBy(t => t.ProcessedOn).ToList();

此请求需要一个附加条件以仅保留最后一个状态。我需要为每个 ActionID 保留更长的 ProcessedOn 时间。

最佳答案

您可以尝试按 ActionID 分组,而不是仅获取最后一项

MyTable
   .Where(t => t.ProcessedOn >= start)
   .Where(t => t.ProcessedOn <= stop)
   .GroupBy(t => t.ActionID)
   .Select(t => t.OrderBy(t => t.ProcessedOn).Last())
   .ToList();

10-08 10:49