如何根据给定字段过滤List <object>以获取最新值

时间:2015-11-22 01:57:43

标签: c# list

我有import wx import os import main class write(wx.Frame): # there is no start function, but still works bleh 课程的对象列表。每个对象都有一个日期戳,Issue表示问题是否仍然有效。对于给定的Boolean(指其他地方的另一个集合),可能有多个条目有true或false,我只关心最新的真实值。

从此列表中,我需要获取其最新值中具有true的项目的所有ID的列表。我已经以一种看似疯狂的低效方式实现了这一点。我认为必须采用更简化的方法:

Issue ID

列表正确地只返回id 2,但我认为必须有更好的方法来实现它。

2 个答案:

答案 0 :(得分:3)

var trueIdList = IssueList.OfType<Issue>()
           .GroupBy(c => c.labelId)
           .Select(c => c.OrderBy(o => o.AuditDate).LastOrDefault())
           .Where(c => c.Result)
           .Select(c => c.labelId)
           .ToList();

答案 1 :(得分:1)

这是两个部分的问题。

首先,找到每个项目中的最新项目,按ID分组:

var latest = 
    from issue in IssueList.OfType<Issue>()
    group issue by issue.labelId into grp
    select grp.OrderByDescending(g => g.AuditDate).FirstOrDefault();

然后隔离具有Result成员集的项目列表:

var ids = 
    from issue in latest 
    where issue.Result 
    select issue.labelId;

在功能上,这相当于chsword的答案,但我认为分两部分来突出其功能的方式稍微清楚一点。