2013-05-10 200 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