2014-03-14 3 views
0

테이블에 다음 값이 있으며 아래 조건을 만족하는 LINQ 쿼리가 필요합니다.최대 값으로 레코드를 가져 오는 LINQ 쿼리

최대 RevOrder가있는 단일 레코드를 선택하십시오. 최대 RevOrder가 동일한 레코드가 여러 개있는 경우 RevDate가 최대 인 레코드를 선택하십시오. RevDate도 동일하면 RevisionStatusID가 최대 인 레코드를 가져옵니다.

RevisionStatusID  RevDate   RevOrder 
1      12/01/2012  0 
2      14/02/2013  1 
3      10/02/2013  2 
4      11/01/2013  2 
5      11/01/2013  3 

나는 아래의 쿼리를 시도했지만 오류가 발생합니다. 유형을 처리

var DocRevIDs = (from tbh in context.tblDocumentHeaders 
       join tbr in context.tblDocumentRevisions 
       on tbh.DocumentHeaderID equals tbr.DocumentHeaderID 
       where tbh.DocumentHeaderID == tb.DocumentHeaderID 
       select tbr).Max(o => new { o.RevOrder,o.RevisionDate,o.DocumentRevisionID }); 

없음 '<> f__AnonymousType52 3[System.Nullable 1 System.Double] System.Nullable`1 [System.DateTime, 선택 System.Int32], 가 알려진이 없기 때문에 값 계층에 매핑. 대신 Max()를 사용하려고 시도의

+0

이는 엔티티 프레임 워크 오류입니다

은 그래서 당신이 비슷한을 줄 것입니다. 'DocRevIDs '를 어떻게 사용합니까? – George

답변

2

orderby 조항의 조합을 사용하고 FirstOrDefault()를 사용합니다. 이것은 곧장 SQL을 통해 수행 할 접근 방법입니다. 당신이 LINQ의 레코드를 주문해야

var docRevision = (from tbh in context.tblDocumentHeaders 
       join tbr in context.tblDocumentRevisions 
       on tbh.DocumentHeaderID equals tbr.DocumentHeaderID 
       where tbh.DocumentHeaderID == tb.DocumentHeaderID 
       orderby tbr.RevOrder descending, tbr.RevisionDate descending, tbr.DocumentRevisionID descending 
       select tbr).FirstOrDefault(); 
1

:

var DocRevIDs = (from tbh in context.tblDocumentHeaders 
      join tbr in context.tblDocumentRevisions 
      on tbh.DocumentHeaderID equals tbr.DocumentHeaderID 
      where tbh.DocumentHeaderID == tbr.DocumentHeaderID 
      orderby tbr.RevOrder descending, tbr.RevDate descending, tbr.RevisionStatusID descending 
      select tbr).First(); 
관련 문제