Как объединить несколько таблиц в одну таблицу с лямбда-выражением? - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть 3 Таблица и модель, как показано ниже

Таблица 1: Ученик

+----+-------+---------+
| ID | Name  | Subject |
+----+-------+---------+
| 1  | Alex  | 2       |
+----+-------+---------+
| 2  | Peter | 1       |
+----+-------+---------+
| 3  | Thomas| null    |
+----+-------+---------+

public class Student {

    public int ID {get; set;}
    public string Name {get; set;}
    public int Subject {get; set;}
}

Таблица 2: Предмет

+----+---------+---------+
| ID | Subject | Teacher |
+----+---------+---------+
| 1  | Math    | 5       |
+----+---------+---------+
| 2  | History | 6       |
+----+---------+---------+

public class Subject {

    public int ID {get; set;}
    public string Subject {get; set;}
    public int Teacher {get; set;}
}

Таблица 3: Учитель

+----+---------+---------------+
| ID | TeacherName | Email     |
+----+-------------+-----------+
| 6  | John        | null      |
+----+-------------+-----------+
| 2  | Anna        | anna@aa.c |
+----+-------------+-----------+

public class Teacher {

    public int ID {get; set;}
    public string TeacherName {get; set;}
    public string Email {get; set;}
}

Я создаю новую модель, подобную этой

public class newModel{

    public Student studentList;
    public Teacher teacherList;
    public Subject subjectList;
}

Как объединить 3 таблицы (модель) выше в новую таблицу (модель) с лямбда-выражением?

Это значит я хочу присоединить таблицу 1 к таблице 2 SubjectID. Затем новая таблица, созданная в таблице 1 и таблице 2, объединяется с таблицей 3 по идентификатору учителя. Но держите все Вещи в Таблице 1 в новом.

Это похоже на

List<newModel> finalList = new List<newModel>();
finalList = db.Student.Join( .... )

и конечный результат finalList, как показано ниже:

+----+--------+---------+-------------+-----------+-------------+-------+
| ID | Name   | Subject | SubjectName | TeacherID | Teachername | Email |
+----+--------+---------+-------------+-----------+-------------+-------+
| 1  | Alex   | 2       | History     | 6         | John        | null  |
+----+--------+---------+-------------+-----------+-------------+-------+
| 2  | Perter | 1       | Math        |           |             |       |
+----+--------+---------+-------------+-----------+-------------+-------+
| 3  | Thomas | null    |             |           |             |       |
+----+--------+---------+-------------+-----------+-------------+-------+

Ответы [ 2 ]

3 голосов
/ 16 февраля 2020

Сначала обновите свои модели, как показано ниже:

Модель ученика:

public class Student
{

    [Key]
    public int Id { get; set; }
    public string Name { get; set; }


    [ForeignKey(nameof(Subject))]
    public int? SubjectId { get; set; }
    public virtual Subject Subject { get; set; } //Navigation Property
}

Предметная модель:

public class Subject
{
    [Key]
    public int Id { get; set; }
    public string SubjectName { get; set; }


    [ForeignKey(nameof(Teacher))]
    public int TeacherId { get; set; }
    public virtual Teacher Teacher { get; set; } //Navigation Property
}

И модель учителя:

    public class Teacher
    {
        [Key]
        public int Id { get; set; }
        public string TeacherName { get; set; }
        public string Email { get; set; }
    }

Затем Add-Migration и update-Database. После того, как все эти изменения связаны между собой, ваши таблицы объединяются и с помощью приведенного ниже запроса вы можете получить данные этих 3 таблиц.

var newModel = dbcontext.Students
                .Include(i => i.Subject)
                .ThenInclude(i => i.Teacher)
                .ToList();

теперь, основываясь на ваших данных, результат newModel.First().Subject.Teacher.TeacherName равен John. и в заключение, когда вы получаете эти данные, вы можете сопоставить эти данные с другой моделью или делать все, что вам захочется.

не стесняйтесь задавать вопросы. удачи.

0 голосов
/ 16 февраля 2020

Если у вас есть свойства навигации, вы можете использовать Include(), иначе вы можете присоединиться вручную, как показано ниже:

var result = (from student in db.Students
             join subject in db.Subjects on student.Subject equals subject.ID
             join teacher in db.Teachers on subject.Teacher equals teacher.ID
             where student.ID = 1
             select new newModel()
             {
                 studentList = student,
                 teacherList = teacher,
                 subejctList = subject
             }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...