2014-02-11 66 views
0

我有一個LINQ查詢,它返回一個狀態列表以及從數據表中返回的每個狀態縮寫的計數。在數據表中使用LINQ GroupBy返回多個字段

var query = ds.Tables[0].AsEnumerable() 
      .GroupBy(r => r.Field<string>("state")) 
      .Select(grp => new 
          { 
           state = grp.Key, 
           Count = grp.Count() 
          }) 
      .OrderBy(o => o.state) 
      .ToList(); 

它返回

State Count 
AL  55 
AK  40 
AZ  2 

我將如何修改這個查詢返回的附加字段(國家名稱)?或者我需要採取另一種方法來實現這一目標?

State Name  Count 
AL  Alaska  55 
AK  Arkansas 40 
AZ  Arizona 2 
+0

你的數據集是否包含你的州名? –

回答

2

上創建一個匿名類型組:

var query = ds.Tables[0].AsEnumerable() 
      .GroupBy(r => new 
      { 
       state = r.Field<string>("state"), 
       name = r.Field<string>("name"), 
      }) 
      .Select(grp => new 
      { 
       name = grp.Key.name, 
       state = grp.Key.state, 
       Count = grp.Count() 
      }) 
      .OrderBy(o => o.state) 
      .ToList(); 
+0

在「name = grp.Key.name」後面留下逗號。但除此之外,它完美的作品。謝謝。 – John81

1

假設 「name」 是同樣爲所有的 「國家」 的價值觀,你可以只改變你的Select到:

 .Select(grp => new 
         { 
          state = grp.Key, 
          Name = grp.First().Field<string>("State Name"), 
          Count = grp.Count() 
         }) 
相關問題