新手求助:求对应指定多表联查SQL的DbContext实现代码
等效于指定SQL的DbContext多表关联查询实现
首先得确保你的实体类和DbContext配置正确,对应数据库里的三个表,示例如下:
// Students表对应的实体类 public class Student { public int StudentRollno { get; set; } // 可添加Student表的其他字段 } // Courses表对应的实体类 public class Course { public int CourseId { get; set; } // 可添加Course表的其他字段 } // AssignedCourses表对应的实体类 public class AssignedCourse { public int AssignedCourseId { get; set; } public int StudentRollnumber { get; set; } // 可添加AssignedCourses表的其他字段 } // 自定义DbContext类 public class YourDbContext : DbContext { public DbSet<Student> Students { get; set; } public DbSet<Course> Courses { get; set; } public DbSet<AssignedCourse> AssignedCourses { get; set; } // 配置数据库连接字符串 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("你的数据库连接字符串"); } }
下面是两种和你给出的SQL等效的实现方式:
方式1:LINQ查询语法(和SQL结构接近,新手易读)
using (var dbContext = new YourDbContext()) { var query = from ac in dbContext.AssignedCourses join student in dbContext.Students on ac.StudentRollnumber equals student.StudentRollno join course in dbContext.Courses on ac.AssignedCourseId equals course.CourseId // 可按需选择字段,或直接返回包含所有表数据的匿名对象 select new { AssignedCourse = ac, Student = student, Course = course }; // 执行查询并获取结果列表 var result = query.ToList(); }
方式2:LINQ方法语法(链式调用风格)
using (var dbContext = new YourDbContext()) { var query = dbContext.AssignedCourses .Join(dbContext.Students, assignedCourse => assignedCourse.StudentRollnumber, student => student.StudentRollno, (assignedCourse, student) => new { assignedCourse, student }) .Join(dbContext.Courses, combined => combined.assignedCourse.AssignedCourseId, course => course.CourseId, (combined, course) => new { combined.assignedCourse, combined.student, course }); var result = query.ToList(); }
额外优化:用导航属性简化查询
如果你的实体类之间配置了导航属性(比如在AssignedCourse里添加关联的Student和Course对象),可以用Include方法直接加载关联数据,EF Core会自动生成对应的Join语句:
// 修改AssignedCourse实体类,添加导航属性 public class AssignedCourse { public int AssignedCourseId { get; set; } public int StudentRollnumber { get; set; } public int AssignedCourseId { get; set; } // 对应Course的CourseId // 导航属性 public Student Student { get; set; } public Course Course { get; set; } } // 查询代码 using (var dbContext = new YourDbContext()) { var result = dbContext.AssignedCourses .Include(ac => ac.Student) .Include(ac => ac.Course) .ToList(); }
内容的提问来源于stack exchange,提问作者Usman Arshad
相关产品推荐
相关产品推荐

