2011-11-29 37 views
0

我們有一個稱爲rowData的Page類的集合。我需要通過名爲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. 

沒有人有任何想法是什麼我們做錯了什麼?

這需要創建報表的數據。數據應顯示每個科目的書籍,章節和頁數。我們的記錄如下所示:

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什麼的。

相關問題