【问题标题】:SQL to linq for Many to Many Relation (C# ASP.net MVC)SQL to linq for Many to Many Relation (C# ASP.net MVC)
【发布时间】:2017-02-28 21:55:22
【问题描述】:

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

这是我的数据库的快速浏览:

实体框架像这样“简化”我的“学生”模型:

[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; }

我可以像这样在 SQL 中找到我的“cours”的“libellé”,其中“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 进行测试)

提前感谢您的帮助

【问题讨论】:

    标签: c# entity-framework linq-to-entities


    【解决方案1】:

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

    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
    

    【讨论】:

    • 我没有得到关于你如何做到的一切,但你解决了我的问题!谢谢,我会继续学习这门语言:)
    【解决方案2】:

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

    使用 DAL 文件夹(用于数据访问层)更简单,如 following 教程中所示(在“创建数据库上下文”副标题下)。

    如果你不明白这个文件夹的目的是什么,我建议你this链接。

    如果我改进了我的 MVC 并遵循本教程,我的 Linq 查询就不会遇到麻烦

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      相关资源
      最近更新 更多