C# 用于过滤多级类的Linq查询
我的部门数据来自数据库。我想根据某些标准筛选这些数据C# 用于过滤多级类的Linq查询,c#,linq,C#,Linq,我的部门数据来自数据库。我想根据某些标准筛选这些数据 [ { "Id":10, "Name":"Name 10", "Teachers":[ { "TeacherId":100, "TeacherName":null, "DepartmentId":100, "Students":[ {
[
{
"Id":10,
"Name":"Name 10",
"Teachers":[
{
"TeacherId":100,
"TeacherName":null,
"DepartmentId":100,
"Students":[
{
"StudentId":1001,
"StudentName":null,
"TeacherId":10,
"DepartmentId":100
}
]
},
{
"TeacherId":101,
"TeacherName":null,
"DepartmentId":100,
"Students":[
{
"StudentId":1001,
"StudentName":null,
"TeacherId":10,
"DepartmentId":100
}
]
}
]
},
{
"Id":100,
"Name":"Name 10",
"Teachers":[
{
"TeacherId":0,
"TeacherName":null,
"DepartmentId":100,
"Students":[
{
"StudentId":5000,
"StudentName":null,
"TeacherId":50,
"DepartmentId":100
}
]
}
]
},
{
"Id":50,
"Name":"Name 10",
"Teachers":[
{
"TeacherId":0,
"TeacherName":null,
"DepartmentId":100,
"Students":[
{
"StudentId":2000,
"StudentName":null,
"TeacherId":50,
"DepartmentId":100
}
]
}
]
}
]
现在,我必须根据如下所示的一些值筛选部门
var departmenIds = new List<int>() { 10, 20, 30 };
var teachers = new List<int>() { 100, 200, 300 };
var students = new List<int>() { 1000, 2000, 3000 };
var list=所有部门
其中(d=>departmentid.Contains(d.Id))
.选择(d=>新部门(){
Id=d.Id,
Name=d.Name,
Teachers=(d.Teachers.Any(t=>teacherIds.Contains(t.TeacherId))
?d.Teachers.Where(t=>TeacherId.Contains(t.TeacherId))
:d.教师)
.Select(t=>newteacher(){
TeacherId=t.TeacherId,
TeacherName=t.TeacherName,
部门Id=d.Id,
Students=t.Students.Any(s=>StudentId.Contains(s.StudentId))
?t.Students.Where(s=>StudentId.Contains(s.StudentId))
:t.学生
})
})
您需要这样做吗?只是检查一下,但您的数据是否一致?例如,所有的老师似乎都是100系的一员。我没有看到任何部门在JSON中有10、20、30个ID。谢谢,这应该行得通。我曾经写过这样一个选择来过滤二级类。我们是否需要手动输入子类的每个属性?我知道这对于属性较少的类来说是有意义的,但是如果每个类中有40到50个属性呢?是的,我认为这里的主要问题是过滤器的逻辑。基本上,当你说“如果列表中没有ID,则返回所有教师/学生”时,你有一个析取,你需要使用if/else或一些我可能不知道的LINQ诡计来处理它
var list = allDeplrtments.Where(d => d.Teachers.Any(t => teachers.Contains(t.TeacherId))).ToList();