여기 당신이 원하는 것을 할 수있는 몇 가지 코드입니다. 각 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