下面是一些代码,做你想做的。它获取每个ID的最新状态并忽略完成的记录。我提供了一个可以运行的完整工作示例(并且希望能够适应您的真实数据)。
//the example data provided by the OP
var data = new []
{
new { Record = 1, Id = "A", State = "Waiting", Date = new DateTime(2013, 1, 1) },
new { Record = 2, Id = "A", State = "InProgress", Date = new DateTime(2013, 1, 2) },
new { Record = 3, Id = "A", State = "Finished", Date = new DateTime(2013, 1, 3) },
new { Record = 4, Id = "B", State = "Waiting", Date = new DateTime(2013, 1, 1) },
new { Record = 5, Id = "C", State = "Waiting", Date = new DateTime(2013, 1, 1) },
new { Record = 6, Id = "C", State = "InProgress", Date = new DateTime(2013, 1, 2) },
new { Record = 7, Id = "D", State = "Waiting", Date = new DateTime(2013, 1, 1) },
new { Record = 8, Id = "D", State = "InProgress", Date = new DateTime(2013, 1, 2) },
};
var query = from d in data
//put the newest record first
orderby d.Date descending
//group by the id
group d by d.Id into groupedById
//get the latest record for each id
let latest = groupedById.First()
//filter out finished records
where latest.State != "Finished"
select latest;
这里是LinqPad的输出。
你会发现,我们有最新的状态,对每个项目,除了因为它完成其已被忽略“A”。
你到目前为止尝试过什么?向我们展示你在分组排序和最大化方面所做的工作,并且我们可以告诉你哪里出错了。对于学习来说,不仅仅是获得解决方案更好...... – Chris