Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于过滤多级类的Linq查询_C#_Linq - Fatal编程技术网

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();