2010-12-10 5 views
0

[Data], [fkID], [UserID], [Timestamp]를 저장하는 데이터베이스 테이블 (Info)이 있습니다. [데이터]는 실제로 여러 열이지만 실제로는 중요하지 않습니다.C# Groupby Distinct

기본적으로 사용자는 양식에 들어가서 데이터를 입력 할 수 있으며 양식은 Info에 새 행을 삽입합니다.

내가 할 수있는 일은 특정 [fkID]에 대해 각 [UserID]에서 가장 최근 [Data] 항목을 선택하는 것입니다. 이것은 LINQ에서 할 수 있습니다, 나는 그것을 알아 냈습니다. 여기 내가 지금까지 가지고있는 것입니다 :

var q = (from i in db.Info 
     where i.fkID == @paramID 
     orderby Timestamp descending 
     groupby new {i.UserID}) 
     .Distinct() 

이것은 분명히 작동하지 않습니다. 올바른 UserID를 반환하지만 실제로 원하는 [Data] 부분은 반환하지 않습니다. 여기 즉

가, 내가하고 싶은 것입니다 :

을 특정 fkID와 정보의 각 항목에 대해, 나는 각 사용자의 가장 최근의 행을 선택합니다.

LINQ에서이 작업을 수행하는 방법을 알고 싶습니다.

답변

3

.Distinct()의를 사용해야합니다

var q = from i in db.Info 
     where i.fkID == @paramID 
     group i by i.UserID into g 
     select new { 
      UserID = g.Key, 
      Recent = g.OrderByDescending(i => i.Timestamp).First() 
     }; 
+0

이 잘 보인다. 아직 테스트하지는 않았지만 제대로 작동한다고 가정합니다. 내가 그것을 시험 할 때, 나는 너의 것을 정확하게 표시 할 것이다. 감사. – Shawn

0

당신은 당신과 같이 각 그룹의 첫 번째 행을 선택해야합니다 .First() 대신