2013-05-10 244 views
4

我需要將我的城市列表按城市的狀態和順序轉換爲組。LINQ group by by by C#

我嘗試了下面的一個,但沒有把它弄清楚。希望對此有所幫助。

cities.GroupBy(g => g.state).Select(o => o.OrderBy(c => c.cityname)); 

回答

9

試試下面的代碼

cities.GroupBy(g => g.state) 
.Select(o =>new { 
      State = o.Key, 
     Cities = o.OrderBy(c => c.cityname).Tolist()}) 
.Tolist(); 
+0

這工作按預期。感謝維傑 – user2369630 2013-05-11 01:46:07

2

先做排序依據:

cities.OrderBy(c=>c.cityname).GroupBy (c => c.state); 

你可能要訂購的狀態如此。

cities.OrderBy(c=>c.cityname).GroupBy (c => c.state).OrderBy (g => g.Key); 
+0

謝謝鮑勃的輸入 – user2369630 2013-05-11 01:46:40

3
cits.OrderBy(d => d.cityname).GroupBy(d => d.state).SelectMany(g => g).ToList(); 

1 - 訂購cityname第一。

2 - 然後根據state對它們進行分組。由於您先訂購,團體仍按照cityname財產進行訂購。

3 - 轉換爲單個列表。否則,您將以組列表結束。

應該工作。我還建議使用camel case表示法來命名變量。

+0

謝謝你的輸入 – user2369630 2013-05-11 01:48:39

2

ToLookup函數可能會給你你需要的東西。

cities.ToLookup(c => c.state, c => c.city); 

這將創建一個IGrouping<string, string>在那裏你可以通過Key值(州)迭代和一組城市值的操作。

要對其進行排序,只需執行cities.OrderBy(c => c.state).ThenBy(c => c.city)即可。

+0

謝謝約翰的輸入 – user2369630 2013-05-11 01:47:26