2014-03-04 27 views
0

計數功能狀態我有一個LINQ聲明如下圖所示:凡在LINQ

var pairs = new [] { 
    new { id = 1, name = "ram", dept = "IT", sal = "3000" }, 
    new { id = 2, name = "ramesh", dept = "IT", sal = "5000" }, 
    new { id = 3, name = "rahesh", dept = "NONIT", sal = "2000" }, 
    new { id = 5, name = "rash", dept = "NONIT", sal = "7000" } 
}; 
var query = (from dynamic stud in pairs 
      group stud by stud.dept into grps 
      select new { 
       IT = grps.Count(stud => stud.dept == "IT"), 
       NONIT = grps.Count(stud => stud.dept == "NONIT") 
      }); 

在這裏我得到了ITNONIT計數,但我得到的結果有兩排,每個組單獨查詢。我可以一次計算兩個人嗎?輸出我在這裏得到,如果我的for循環像下面的查詢是2,0和0,2

foreach (dynamic result in query) 
{ 
    Console.WriteLine(result.IT + "," + result.NONIT); 
} 

這是因爲每個組單獨查詢。我正在尋找像2,2這樣的結果。 這可能嗎?

回答

1

如果你確切地知道該部門的名稱或者是「IT」或「NONIT」,結果應該是單一的數據,就可以得到所期望的輸出不進行分組:

var result2 = new 
       { 
        IT = (from dynamic stud in pairs where stud.dept == "IT" select stud).Count(), 
        NONIT = (from dynamic stud in pairs where stud.dept == "NONIT" select stud).Count() 
       }; 
Console.WriteLine(result.IT + "," + result.NONIT); 

,或者如果你青睞分組的話,建議轉換查詢結果到詞典容易被部門姓名查詢計數:

var query = (from dynamic stud in pairs 
       group stud by stud.dept 
       into grps 
       select 
        new 
        { 
         Dept = grps.Key, 
         Count = grps.Count() 
        }).ToDictionary(o => o.Dept, o => o.Count); 

Console.WriteLine(string.Format("result : {0}", query["IT"] + "," + query["NONIT"])); 

如果沒有上述的西裝您的要求,請及時通知問題解釋一下你想實現什麼。

+1

它像一個魅力工作,這兩個解決方案都很棒,謝謝 – Shekar