繁体   English   中英

查询以检索每个操作的最新状态

[英]Query to retrieve the latest status of each action

我是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时刻之间每个动作的最新状态。 这可能吗?

我已写过:

 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();

您想要使用GroupBy运算符:

MyTable
    .Where(t => t.ProcessedOn >= start && t.ProcessedOn <= stop)
    .GroupBy(t => t.ActionID)
    .Select(g => new {
        Action = g.Key,
        LastStatus =
            g.Where(a => a.ProcessedOn == g.Max(a2 => a2.ProcessedOn) )
                .Single().Status
    })
    .ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM