c# - LINQ 多列表连接

标签 c# linq

<分区>

我正在学习 LINQ,我尝试设置一个更复杂的情况来使用 LINQ 进行管理。好吧……我卡住了。

我设置的是3个类

类类:

class Class
{
    public int Number { get; private set; }

    public Class(int number)
    {
        Number = number;
    }
}

教师类:

class Teacher
{
    public string Name { get; private set; }

    public int Class { get; set; }

    public Teacher(string name, int Class)
    {
        Name = name;
        this.Class = Class;
    }
}

学生类(class):

class Student
{
    public string Name { get; private set; }
    public int Class { get; set; }

    public Student(string name, int Class)
    {
        Name = name;
        this.Class = Class;
    }
}

我想做的是将这 3 个类(class)连接在一起,以获得包含老师和他们的学生的学校类(class)列表。

我试过:

var classWithTeacherAndStudent =
            from Class in classes
            join Teacher in teacher
                on Class.Number equals Teacher.Class
            let teacherClass = new {Class, Teacher}
            join student in students
                on teacherClass.Class.Number equals student.Class
                into entireClass
            select new
            {

            };

列表中有许多 Class、Teacher 和 Student 对象。

最佳答案

连接似乎是正确的。您可以只选择匿名类型的所有值,这样每个条目都有一个类(class)、它的老师和它的所有学生。

var classWithTeacherAndStudent =
from Class in classes
join Teacher in teacher
    on Class.Number equals Teacher.Class
let teacherClass = new { Class, Teacher }
join student in students
    on teacherClass.Class.Number equals student.Class
    into entireClass
select new
{
    teacherClass.Teacher, teacherClass.Class, entireClass
};

foreach (var entry in classWithTeacherAndStudent)
{
    Console.WriteLine("teacher: {0}, class: {1}", entry.Teacher.Name, entry.Class.Number);
    foreach (var student in entry.entireClass)
    {
        Console.WriteLine(student.Name);
    }
}

关于c# - LINQ 多列表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37323523/

相关文章:

c# - 使用 Linq 将 DataTable 分解成固定大小的 block 的干净方法是什么?

c# - 从平面表中表示的父/子关系创建树

c# 获取在列表中的某个元素之间分组的新元素列表

c# - 在 LINQ 查询中应用 group by,进一步连接所需的信息丢失

c# - 在 Raspberry pi c# 上赢得 10 IoT TPM

c# - 无效的列名 "ctn"

c# - 将数据表拆分为多个数据表

c# - 从按树顺序排序的树创建平面列表

C# GroupBy - 创建多个分组级别

c# - Kinect 骨架从 v1.8 更改为 v2