2012-05-10 2 views
13

ID, ShortCode, UploadDate의 세 가지 열이있는 테이블이 있습니다.LINQ 그룹 다음으로 결과 그룹을 주문하십시오.

LINQ를 사용하여 결과를 짧은 코드로 그룹화 한 다음 (모든 결과를 유지하려면) 그룹을 정렬하고 목록을 반환하고 싶습니다.

내가 단축 코드별로 그룹화 된 모든 결과를 반환 할
rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList<PDFDocument>(). 
GroupBy(b=>b.ShortCode) 
.SelectMany(b=>b).ToList<PDFDocument>() 

이 UploadDate으로 분류되어 각 그룹 내에서 항목과 그룹이 그것에 가장 최근의 문서를 가지고있는 한, 그래서 분류 :

나는 다음이 먼저.

누구에게도 이것이 가능한지 알고 있습니까?

답변

31

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
    .AsEnumerable() 
    .OrderByDescending(d => d.UploadDate) 
    .GroupBy(d => d.ShortCode) 
    .SelectMany(g => g) 
    .ToList(); 

이해야

  • 주문 (그래서 최근에서 오래된 것 순으로 내림차순) 업로드 날짜별로 항목 짧은에 의해
  • 다음 그룹을보십시오 : 그것은 조금에게 쿼리를 복잡하게 코드 - 따라서 각 그룹 내에서 항목은 여전히 ​​정렬됩니다.
  • 그룹이 아직 내리고 있습니다. 순서를 종료하므로 성능이 각각의 내용을 정렬

    rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
        .AsEnumerable() 
        .GroupBy(d => d.ShortCode) 
        .Select(g => g.OrderByDescending(d => d.UploadDate)) 
        .OrderByDescending(e => e.First().UploadDate) 
        .SelectMany(e => e) 
        .ToList(); 
    

    을하고 당신이 많은 것이 더 문제가있는 경우 필요 다시

  • 마지막으로 하나의리스트

에 결과를 연결하여 주문 없음 먼저 모든 것을 정렬 한 다음 그룹화하지 말고 별도로 그룹화하십시오.

+0

고마워.이게 내가 원했던거야. – Ketchup

+1

"OrderBy"+ "GroupBy"+ "OrderBy"를 넣는 순서에 대해 궁금 해서요.이 답변에 완벽하게 답변했습니다. – EdmundYeung99

+0

이 항목이 List 유형의 엔티티를 반환하지만 그룹 유형이되고 싶습니다. 컴파일러 오류입니다. 가져 오는 중입니다. 'System.Collections.Generic.List '형식을 'System.Collections.Generic.IEnumerable >'으로 암시 적으로 변환 할 수 없습니다. 명시 적 변환이 존재합니다 (캐스트가 누락 되었습니까?) –

5

사실, 짧은 코드로 그룹화하고 싶지는 않습니다. 그래서 다음 쿼리는 트릭을 수행해야합니다

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList() 
.OrderBy(b => b.ShortCode) 
.ThenBy(b => b.UploadDate) 
.ToList() 

편집 당신이 정말 GROUPBY를 사용하려는 경우, 당신은 그래서이 방법으로 수행 할 수

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList() 
.GroupBy(b => b.ShortCode) 
.SelectMany(grouping => grouping.OrderBy(b => b.UploadDate)) 
.ToList() 

을하지만, 나는 그것을 억제. 처음부터 그룹을 원하지 않는다면 그룹을 만드는 것은 아무런 의미가 없습니다!

두 번째 편집

난 당신이 너무 UpdateTime의 지시 그룹을 원하지 않았다.

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList() 
.GroupBy(b => b.ShortCode) 
.Select(grouping => grouping.OrderByDescending(b => b.UploadDate)) 
.OrderByDescending(grouping => grouping.First().UploadDate) 
.SelectMany(grouping => grouping) 
.ToList() 
+0

적어도 그가 왜 그렇게했는지 설명하지 않은 사람이 설명 할 수 있습니까? – Falanwe

+0

이 명령은 두 그룹의 요소를 날짜순으로 정렬합니까? 그런 다음 그룹화 된 결과를 주문하십시오. – Ketchup

+0

첫 번째 ShortCode가있는 모든 요소는 결과 목록에 먼저 표시되고 UpdateTime에 의해 정렬 된 다음 두 번째 ShortCode에 모든 요소가 정렬되고 마찬가지로 정렬됩니다. 결과는 주로 열을 기준으로 요소를 순서대로 정렬 한 다음 다른 요소를 기준으로 정렬 할 때 얻을 수있는 것과 비슷합니다. – Falanwe