【问题标题】:How can I convert SQL to lambda expressions如何将 SQL 转换为 lambda 表达式
【发布时间】:2019-03-16 09:17:31
【问题描述】:

在我的数据库中,我创建了如下表结构。

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

现在我需要将此查询转换为 lambda 表达式或 Linq。我该怎么做?请帮我。有任何可能的方法来使用 Visual Studio 生成它。

【问题讨论】:

    标签: c# sql-server linq lambda linq-to-sql


    【解决方案1】:

    好吧,您可以使用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; 
    

    不确定这是一个绝对正确的查询,但我希望你能明白主要意思。

    【讨论】:

      【解决方案2】:

      有任何可能的方法来使用 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;
      

      【讨论】:

        【解决方案3】:

        拉姆达:

        Students
        .Where(x=> x.Course.Course_Subjects
                .Any(y => y.Subject.Teacher_Subjects
                        .Any(z => z.Teach_ID == someTeacherId)
                )
        )
        .Select(x => x)
        

        【讨论】:

          猜你喜欢
          • 2012-06-14
          • 2017-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多