我需要将我的城市列表按国家/地区分组,并按城市顺序排列。
我在下面尝试但未能正确行事。非常感谢任何帮助。
cities.GroupBy(g => g.state).Select(o => o.OrderBy(c => c.cityname));
答案 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)
。