Как я могу конвертировать SQL в лямбда-выражения - PullRequest
0 голосов
/ 16 марта 2019

В своей базе данных я создал структуру таблиц следующим образом.

CREATE TABLE Course 
(
    Course_ID int IDENTITY(1,1) PRIMARY KEY,
    Name varchar(255) NOT NULL,
);

CREATE TABLE Student 
(
    Stu_ID int IDENTITY(1,1) PRIMARY KEY,
    Name varchar(255) NOT NULL,
    Mobile varchar(255),
    Age int,
    Course_ID int,
    FOREIGN KEY (Course_ID) REFERENCES Course(Course_ID)
);

CREATE TABLE Subject  
(
    Sub_ID int IDENTITY(1,1) PRIMARY KEY,
    Name varchar(255) NOT NULL,
);

CREATE TABLE Teacher 
(
    Teach_ID int IDENTITY(1,1) PRIMARY KEY,
    Name varchar(255) NOT NULL,
    Mobile varchar(255)
);

CREATE TABLE Course_Subject 
(
    CouSub_ID int IDENTITY(1,1) PRIMARY KEY,
    Course_ID int,
    Sub_ID int,
    FOREIGN KEY (Course_ID) REFERENCES Course(Course_ID),
    FOREIGN KEY (Sub_ID) REFERENCES Subject(Sub_ID)
);

CREATE TABLE Teacher_Subject 
(
    TeachSub_ID int IDENTITY(1,1) PRIMARY KEY,
    Teach_ID int,
    Sub_ID int,
    FOREIGN KEY (Teach_ID) REFERENCES Teacher(Teach_ID),
    FOREIGN KEY (Sub_ID) REFERENCES Subject(Sub_ID)
);

Теперь моя проблема в том, что мне нужно получить данные учеников, которые учились у какого-то учителя, а это значит, что нужно найти учеников некоторых учителей, которые учились у него / нее. Чтобы выполнить мое требование. Я пишу этот запрос SQL.

select 
    s.*
from 
    tbl_student s
inner join 
    Course_Subject tcs on s.Course_Id = tcs.Course_Id
inner join 
    Teacher_Subject tst on tst.Sub_ID = tcs.Sub_ID
inner join 
    Teacher t on t.Teach_ID = tst.Teach_ID
where 
    t.Teach_ID = @SomeTeacherId

Теперь мне нужно преобразовать этот запрос в лямбда-выражение или Linq. Как мне это сделать? Пожалуйста, помогите мне. Есть любой возможный способ создать это с помощью Visual Studio.

Ответы [ 3 ]

2 голосов
/ 16 марта 2019

Есть любой возможный способ сгенерировать это с помощью Visual Studio .?

Да, вы можете сделать это с помощью Linq-to-SQL

для вашего запроса, это может быть присвоено

var students = from student in db.Students
            join tcs in db.CourseSubjects on student.CourseId equals tcs.CourseId
            join tst in db.TeacherSubjects on tcs.SubId equals tst.SubId
            join t in db.Teachers on tst.TeachId equals t.TeachId
            where t.TeachId == someTeacherId
            select student;
2 голосов
/ 16 марта 2019

Ну, вы можете использовать EF для генерации сопоставления объектов с вашими таблицами. И используйте LINQ, чтобы переписать ваш запрос с немного другим синтаксисом:

var result = from students in tbl_student
             join subjects in Course_Subject on students.Course_Id == subjects.Course_Id
             join ts in Teacher_Subject on subjects.Sub_ID == ts.Sub_ID
             join teachers in Teacher on teachers.Teach_ID == ts.Teach_ID
             where teachers.Teach_ID == "your_value"
             select students; 

Не уверен, что это абсолютно правильный запрос, но я надеюсь, что вы поймете основную идею.

0 голосов
/ 04 апреля 2019

Lambda:

Students
.Where(x=> x.Course.Course_Subjects
        .Any(y => y.Subject.Teacher_Subjects
                .Any(z => z.Teach_ID == someTeacherId)
        )
)
.Select(x => x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...