2010-06-18 40 views
0

我有一個BatchBatchItems由多個用戶輸入。我試圖不僅爲每個用戶獲得單個批次的小計,還要爲同一批次獲得總計,而不管用戶分組。它是我無法弄清的最後一部分。我如何得到這個總數以便將它作爲列表返回?LINQ Group通過小計和合計

from b in context.BatchItem 
    where b.BatchId == batchId 
    group b by b.CreatedByUser into g 
    select new 
    { 
     BatchName = g.FirstOrDefault<BatchItem>().Batch.Name, 
     User = g.Key, 
     UserBatchCount = g.Count<BatchItem>(), 
     // something like this is what I can't figure out 
     TotalBatchCount = b.Count<BatchItem>() 
    } 
+0

我認爲這將是一個更簡單的概念。我想我可以返回一個列表與非匿名類型,然後總結該列表中的UserBatchCount字段。當我開始走這條路時,我認爲這對LINQ來說並不複雜。 100%的LINQ解決方案仍然很棒。 – woodyiii 2010-06-21 13:03:45

回答

0

不知道,但嘗試這個辦法:

from b in context.BatchItem 
let cnt = context.BatchItem.Count() 
b.BatchId == batchId 
group b by b.CreatedByUser into g 
select new 
    { 
     BatchName = g.FirstOrDefault<BatchItem>().Batch.Name, 
     User = g.Key, 
     UserBatchCount = g.Count<BatchItem>(), 
     // something like this is what I can't figure out 
     TotalBatchCount = cnt 
    } 
+0

對SQL更熟悉,這對我來說看起來也很好,但是應用程序不會編譯這個錯誤的b/c - 「當前上下文中不存在名稱cnt。」 – woodyiii 2010-06-21 12:52:08

0
 var batch1 = new { Name = "Batch A", BatchId = 1, CreatedByUser = "David" }; 
     var batch2 = new { Name = "Batch A", BatchId = 1, CreatedByUser = "Mike" }; 
     var batch3 = new { Name = "Batch B", BatchId = 2, CreatedByUser = "Cathy" }; 
     var batch4 = new { Name = "Batch B", BatchId = 2, CreatedByUser = "Cathy" }; 
     var batch5 = new { Name = "Batch B", BatchId = 2, CreatedByUser = "David" }; 
     var batch6 = new { Name = "Batch C", BatchId = 3, CreatedByUser = "Henry" }; 
     var batchItem = new[] { batch1, batch2, batch3, batch4, batch5, batch6 }.ToList(); 


     var result = 
     batchItem.Where(b => b.BatchId == batchId) 
       .GroupBy(b => b.BatchId, b => b) 
       .SelectMany(g => 
         g.GroupBy(c => c.CreatedByUser, c => c) 
         .SelectMany(sg => 
              sg.Select(c => new 
              { 
               BatchName = g.First().Name, 
               UserName = c.CreatedByUser, 
               UserBatchCount = sg.Count(), 
               TotalBatchCount = g.Count() 


              }) 
            ) 

       ); 

審計日誌:刪除前兩個代碼塊。

+0

「名稱g1在當前上下文中不存在」 - 同樣的問題。 – woodyiii 2010-06-21 12:52:58

+0

格式化殺死我的眼睛 – abatishchev 2010-06-22 09:10:52

+0

我已經刪除了以前的代碼塊。 – 2010-06-22 12:48:42