我有一个简单的列表,它从我的DB返回到我的MVC API,示例查询是
select school, class, pupil from area
有了它,我将添加到列表中
foreach (DataRow row in table.Rows)
{
var area = new Area();
area.school = row.ItemArray[0].ToString();
area.class = row.ItemArray[1].ToString();
area.pupil = row.ItemArray[2].ToString();
returnedlist.Add(area);
}
此时API只返回列表
{
"School": "",
"Class": "",
"Pupil": ""
},
{
"School": "",
"Class": "",
"Pupil": ""
},
然而,理想情况下,我希望它像下面的一样嵌套返回
[
{
School: "Name",
Class: [
ClassName: '',
Pupil: [
PupilName: ''},
PupilName: ''},
PupilName: '']
},
{
School: "Name",
Class: [
ClassName: '',
Pupil: [
PupilName: ''},
PupilName: ''},
PupilName: '']
},
我可能已经把它宰了,但你明白了。
数据的类别再次是非常简单的
public class Area
{
public string School { get; set; }
public string Class { get; set; }
public string Pupil { get; set; }
}
到目前为止,我已经尝试过在列表等中返回一个列表,但没有任何运气。
非常感谢您的帮助。
要获得预期结果,可以创建具有以下结构的类:
1-类
public class NewArea
{
public string School { get; set; }
public List<Class> Classes { get; set; }
}
public class Class
{
public string Name { get; set; }
public List<string> Pupils { get; set; }
}
2-首先,按学校分组,对于每个分组项目,<按>按>班级进行分组:
List<NewArea> newAreas = returnedlist
.GroupBy(x => x.School)
.Select(x => new NewArea
{
School = x.Key,
Classes = x.GroupBy(y => y.Class).Select(z => new Class
{
Name = z.Key,
Pupils = z.Select(w => w.Pupil).ToList()
}).ToList()
}).ToList();
3-测试示例:
List<Area> returnedlist = new List<Area>
{
new Area{School = "s1", Class="c1",Pupil="p1"},
new Area{School = "s1", Class="c1",Pupil="p2"},
new Area{School = "s1", Class="c2",Pupil="p1"},
new Area{School = "s1", Class="c2",Pupil="p2"},
new Area{School = "s2", Class="c1",Pupil="p1"},
};
结果
[
{
"School":"s1",
"Classes":[
{
"Name":"c1",
"Pupils":[
"p1",
"p2"
]
},
{
"Name":"c2",
"Pupils":[
"p1",
"p2"
]
}
]
},
{
"School":"s2",
"Classes":[
{
"Name":"c1",
"Pupils":[
"p1"
]
}
]
}
]
命名空间:
using System.Linq;
using System.Collections.Generic;