2011-11-29 3 views
0

우리는 rowData라는 페이지 클래스 모음을 가지고 있습니다. 이 클래스들을 PartitionKey이라는 열의 하위 문자열로 그룹화해야합니다. 클래스 파티션 키의 일부를 LINQ와 그룹화하려면 어떻게해야합니까?

var a = from Page in rowData 
     group Page by new { 
     Page.PartitionKey.Substring(0,2), 
     Page.PartitionKey.Substring(2,6), 
     Page.PartitionKey.Substring(8) 
     } into group 
    select new { 
     group.key.SubjectId 
     , group.key.bookId 
     , group.Key.chapterId 
     , total = rowData.sum(s => s.Page) 
    }; 

우리는이 제안을 시도했지만 오류가 있습니다 :

Error 1 Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access. 

사람이 우리가 잘못 무슨 일을하는지 어떤 생각을 가지고 있습니까?

보고서의 데이터를 만드는 것이 필요합니다. 데이터에는 각 주제에 대한 책, 장 및 페이지 수가 표시되어야합니다. Google 기록은 다음과 같습니다.

Primary key (columns 0-1 show the subject) 
Primary key (columns 2-6 show the book ID) 
Primary key (columns 8-12 show the chapter ID) 
Row Key < there is a unique key for each row 

따라서 기본 키와 행의 조합은 고유하며 단일 페이지를 나타냅니다. 우리는이 같은 모습보고해야 할이 예에서

010000100001 
010000100001 
010000100001 
010000100002 
010000100002 
010000100002 
010000200003 
010000200003 
020000300004 
020000300005 

: 여기

기본 키의 예

Subject Books Chapters Pages 

01   2   3   8 
02   1   2   2 

답변

3

좋아을, 지금 당신은 내가 질문을 명확히했습니다 당신을 믿으십시오 실제로 만 주제별로 그룹화하고 싶습니다. 당신이 좋아하는 것 같아요 :

var a = from page in rowData 
     select new { 
      SubjectId = Page.PartitionKey.Substring(0,2), 
      BookId = Page.PartitionKey.Substring(2,6), 
      ChapterId = Page.PartitionKey.Substring(8) 
     } into split 
     group split by split.SubjectId into g 
     select new { 
      SubjectId = g.Key, 
      Books = g.GroupBy(x => x.BookId).Count(), 
      Chapters = g.GroupBy(x => x.ChapterId).Count(), 
      Pages = g.Count() 
     }; 

그래 맞아요?


원래 대답 당신은 익명 형식의 속성 이름을 지정해야합니다

:

var a = from page in rowData 
     group page by new { 
      SubjectId = Page.PartitionKey.Substring(0,2), 
      BookId = Page.PartitionKey.Substring(2,6), 
      ChapterId = Page.PartitionKey.Substring(8) 
     } into g 
     select new { 
      g.Key.SubjectId, 
      g.Key.BookId, 
      g.Key.ChapterId, 
      Total = g.Sum(s => s.PageNumber) 
     }; 

(당신은 Sum 인수를 확인해야합니다 - 당신이 무엇인지 분명하지 않다 그곳에서 해보려고합니다.)

+0

감사합니다. 예, 이제 총계 라인에서 실패합니다. 우리가 필요로하는 것은 각 주제에 대해 총 도서 수, 전체 챕터 수 및 총 페이지 수를 보여주는 보고서를 작성하는 것입니다. 필요한 것을 설명하기 위해 질문을 조금 더 업데이트했습니다. –

+0

@ RichardM : 당신이 합치려고하는 것은 여전히 ​​분명하지 않습니다. 실제로 그 그룹의 요소 수를 계산하고 싶습니까? 그렇다면'g.Count()'를 사용하십시오. –

+0

죄송합니다. 나는 질문을 업데이트 할 정도로 명확하지 않았습니다. 나는 또한 예제를 추가 할 것이다. –

2

회원님의 그룹 키에는 회원 이름이 필요합니다 :

var a = from Page in rowData 
    group Page by new { 
    S1 = Page.PartitionKey.Substring(0,2), 
    S2 = Page.PartitionKey.Substring(2,6), 
    S3 = Page.PartitionKey.Substring(8) 
    } into group 
    select new { 
    group.key.S1 
    , group.key.S2 
    , group.Key.S3 
    , total = rowData.sum(s => s.Page) 
}; 

여기에 group을 사용하지 않을 경우 into g 또는 더 나은 이름으로 지정하는 것이 좋습니다.

관련 문제