SQL 到多对多关系的 linq (C# ASP.net MVC)

SQL to linq for Many to Many Relation (C# ASP.net MVC)

我正在寻求一些帮助,以便能够从 SQL 查询中转录一些 LINQ :

快速浏览一下我的数据库:

Entity framework 像这样“简化”我的“学生”模型:

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<etuResult> etuResult { get; set; }

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<cours> cours { get; set; }

我能够找到我的“课程”的“libellé”,其中 SQL 中的“etudiant_id”== 1,如下所示:

select c.libelle
from cours c 
where c.cours_id in (
    select ec.cours_id
    from etuCours ec
    where ec.etudiant_id in (
        select e.etudiant_id
        from etudiant e
        ))

但我没有找到如何使用 linq 进行查询(我使用 LinqPad 4 进行测试)

提前感谢您的帮助

为什么不直接在实体上调用集合?如果已映射,则过滤会自动发生。无需创建另一个查询。

var courses = myEtudiantInstance.cours;

如果你想要 libelle 那么

var libelles = myEtudiantInstance.cours.Select(c => c.libelle);

这需要启用延迟加载或在获取集合中的 Etudiant 实例时使用 Include

var libelles = dbContextInstance.Etudiants
  .Include(e => e.cours)
  .Single(e => e.EtudiantId == 1) // will throw exception if entity not found
  .cours.Select(c => c.libelle); // get all libelle's

编辑:如果这对某人有用:

使用 DAL 文件夹(用于数据访问层)更简单,如 following 教程(在副标题 "Create the Database Context" 下)所示。

如果你不明白这个文件夹的用途,我建议你 this link.

如果我改进了 MVC 并按照本教程进行操作,我的 Linq 查询就不会遇到麻烦