我正在使用 linq 處理多對多關系,其中沒有外鍵,但在幕后根據模型上的物體集合為我創建了交集表。
給定以下課程
public class BaseEntity
{
public int Id { get; set; }
public DateTime DateUpdated { get; set; }
}
public class Student : BaseEntity
{
public string Name { get; set; }
[JsonIgnore]
public ICollection<Course> Courses { get; set; }
}
public class Course : BaseEntity
{
public string Name { get; set; }
public ICollection<Student> Students { get; set; }
}
以及創建的表
dbo.Courses
dbo.Students
dbo.CourseStudent // (but this is not in my context class as ef generated it for me when I ran my migration)
我正在使用 Blazor,在我的一個組件中我得到了一個學生,從那里我想得到學生分配的課程,但我在查詢時遇到了問題,并嘗試了以下和許多其他
// What I'm trying to achieve
// select * from courses where students.id == id
// or
// select * from courses where students contains student.id
public async Task<List<Course>> GetByStudent(int id) // studentId
{
return await _db.Courses.GroupBy(x => x.Students.Where(x => x.Id == id)).ToList();
return await _db.Courses.Include(x => x.Students).Where(x => x.Id == id).ToListAsync();
}
感謝閱讀,我希望它是有道理的!
誰能指出我如何通過學生導航屬性為單個學生獲取所有課程的正確方向。
或者,使用沒有外鍵的 linq 訪問導航屬性的方法。
uj5u.com熱心網友回復:
我如何通過學生導航屬性獲取單個學生的所有課程的方向。
context.Students.Include(s => s.Courses).First(s => s.Id == studentId)
Include 使 EF 撰寫連接以將相關課程引入學生。它正在通過映射表是 EF 的作業來整理,而不是你的..
旁注,盡管在 where 或 select 子句中明確提及屬性和導航,但不一定需要加入它。有關包含和選擇之間相互作用的更多資訊,請參見 Gert 的詳細答案
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/484090.html
