LINQ group by和C#中的order by

时间:2013-05-10 10:33:02

标签: c# asp.net-mvc linq

我需要将我的城市列表按国家/地区分组,并按城市顺序排列。

我在下面尝试但未能正确行事。非常感谢任何帮助。

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

4 个答案:

答案 0 :(得分:9)

尝试以下代码

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

答案 1 :(得分:3)

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

1 - 首先按cityname排序。

2 - 然后根据state对它们进行分组。由于您先订购,因此仍然会根据cityname属性订购组。

3 - 转换为单一列表。否则,您将最终得到组列表。

应该有效。我还建议使用camel case表示法来命名变量。

答案 2 :(得分:2)

首先执行命令:

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

您可能希望将状态排序为。

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

答案 3 :(得分:2)

ToLookup功能可以为您提供所需的功能。

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

这将创建一个IGrouping<string, string>,您可以在其中迭代Key值(状态)并对一组城市值进行操作。

要先排序,只需cities.OrderBy(c => c.state).ThenBy(c => c.city)