linq 如何使用Join而不是Include查询EF Core中的数据?

4zcjmb1e  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(165)

我有两个表。就像教师学生一样。他们有一对多的关系
两个类喜欢:

public class TTeachers
{  
   [Key]
   public long Id {get; set;}
   public string? No { get; set; }
   public string? Name { get; set; }
}
public class TTStudent
{
   [Key]
   public long Id {get; set;}
   public string? TeacherNo{ get; set; }
   public string? Name{ get; set; }
}

由于某种原因,我没有指定它们的外键。
但是student表有一个字段,例如teacherNo。指定它们的关系
现在我想用Linq来查询Teacher And Student如果我用外键的话。我只是用Include来查询Student。例如:

var data = (from t in _context.TTeachers.Include(s=> t.Students)
            where t.ID == ID 
            selet new {
             t.ID ,
             t.Name,
             t.Students,
            }).First();

那么什么是等价的使用连接?我尝试这个:

var data = from t in _context.TTeachers
           join s in _context.TTStudent on t.No equals s.TeacherNo into student
           where t.ID == ID
           select new { t.Name, list = students }

它将运行并出错。
如何使用Join查询教师信息和关联的学生数据?
我的意思是没有导航属性。我的团队不允许我们使用外键。

vuv7lop3

vuv7lop31#

GroupJoin在EF Core中有限制,最好通过子查询来实现:

var data = 
    from t in _context.TTeachers
    where a.Fid == lFid
    select new 
    { 
        t.name,
        list = _context.TTStudent.Where(s => s.TeacherNo == t.No) 
    }

无论如何,最好使用导航属性,这样定义了错误比较键的风险就更小。

相关问题