2012-10-15 27 views
0

我已經喜歡C#LINQ同名

Date  status  recno 
--------------------------------- 
2012  DST;Par  1 
------------------------------------ 
2012  DST   2 
-------------------------------- 
2012  DST   3 
-------------------------------------------- 
2012  DST;Ts   4 
----------------------------------- 

數據表目前我寫這樣的查詢分組:

var data = from b in table.AsEnumerable() 
      where b.DateInterval>=fromDate && b.DateInterval<=toDate 
      group b by b.Channel1_status into g      
      select new 
      { 
       AccountNo=accountNumber, 
       Status = statusLabels[g.Key].ToString(), 
       StatusCount = g.Count(), 
      }; 

但是,它返回我的結果,這些結果:

Result: DST-2 
     DST;par-1 and DST;Ts-1 

Expected: DST-4 DST;par-1 and DST;Ts-1 

請向我解釋我做錯了什麼以及如何獲得預期的結果。

+1

我懷疑你的表沒有得到你認爲它的信息,或者您使用的是更復雜的查詢這是使用連接或類似的東西。 –

+0

你的預期結果是什麼? –

+0

這不是複雜的查詢,只是將列通道狀態分組並獲得結果,如下所述。但事情是我得到了我以上的預期結果。 – nag

回答

1

如果要計算以DST開始的所有狀態並仍將變化分組(DST; par,DST; ts),則可以手動進行。

像這樣(沒有測試,但我認爲你的想法):

var dst = data.FirstOrDefault(x => x.Status == "DST"); 
if (dst != null) { 
    foreach (var group in data.Where(x => x != dst && x.Status.StartsWith("DST")) { 
     dst.StatusCount += group.StatusCount; 
    } 
} 
+0

它顯示這裏'除(dst)'有一些無效的參數 – nag

+0

@nag是的,認爲它可能無法立即工作,因爲它只是一個例子,讓這個想法跨越。但是,我編輯了代碼示例,以便錯誤消失。 – Botz3000

+0

它顯示'dst.statuscount'是隻讀的! – nag