我正在尝试使用lambda从表/结果集中获取数据,并生成包含其他对象列表的对象 我有一个元素列表,例如:
continent | country | state
europe | france | paris
europe | france | rouen
europe | spain | madrid
europe | italy | milan
america | usa | ohio
america | usa | kansas
america | usa | texas
america | usa | iowa
america | mexico | colima
america | mexico | tabasco
africa | niger | maradi
africa | niger | tahoua
africa | niger | niamey
我需要按大陆和国家对其进行分组,以生成一个包含对象列表的对象列表......类似于:
我拥有的是:
DataTable.GroupBy(g => new
{
g.continent,
g.country
})
.Select(s => s.First()).ToList().ForEach(n =>
{
_continentals.Add(new Continent
{
name = n.continent,
countries = new List<Country>
{
new Country
{
name = n.country,
states = new List<State>
{
new State
{
name = n.state
}
}
}
}
}
}
但它不起作用,我不知道如何解决它 (它没有按正确的顺序生成/分组元素。)
答案 0 :(得分:3)
您需要按大陆分组,然后按国家/地区对每个组进行分组,而不是根据大陆/国家/地区分组一次:
var query = DataTable.GroupBy(item => item.continent,
(key, group) => new
{
Continent = key,
Countries = group.GroupBy(item => item.country)
});