【问题标题】:Linq query for joining many to many tables用于连接多对多表的 Linq 查询
【发布时间】:2021-04-02 00:46:58
【问题描述】:

我是 LINQ 的新手,需要您的建议。 我有 2 个这样的表:

public class Subjects
{
    public Subjects()
    {
        Classes = new List<Classes>();
    }

    public int Id { get; set; }
    public string SubjectName { get; set; }

    public virtual List<Classes> Classes { get; set; }
}

public class Classes
{
    public Classes()
    {
        Subjects = new List<Subjects>();
    }

    public int Id { get; set; }
    public string ClassName { get; set; }

    public virtual List<Subjects> Subjects { get; set; }
}

和实体框架创建SubjectClasses

public SubjectsMap()
{
    this.HasKey(s => s.Id);

    this.Property(s => s.SubjectName)
        .IsRequired()
        .HasMaxLength(50);

    this.ToTable("Subjects");

    this.HasMany(c => c.Classes)
        .WithMany(s => s.Subjects)
        .Map(cs =>
        {
            cs.MapLeftKey("SubjectId");
            cs.MapRightKey("ClassId");
            cs.ToTable("SubjectClasses");
        });
}

Subject---- SubjectClasses ----- 类

我的上下文没有 SubjectClasses,所以我需要将 SQL 查询转换为 Linq 或 Lambda。但是 Linqpad 对我没有帮助,或者我无法使用它。我只是想取名字,主题名

SELECT st.Firstname, s.SubjectName 
FROM SubjectClasses sc
    INNER JOIN Subjects s on s.Id = sc.SubjectId
    INNER JOIN Students st on st.ClassId = sc.ClassId
WHERE sc.ClassId = 3

【问题讨论】:

  • 喜欢这个? context.Subjects.SelectMany(s =&gt; s.Classes, (s, c) =&gt; new { s.SubjectName, c.ClassName})
  • 我怎样才能显示students.Firstname?

标签: sql linq join lambda many-to-many


【解决方案1】:

它正在工作。

               (from st in context.Students
                from s in context.Subjects
                join c in context.Classes
                on new { stuId = st.ClassId } equals new { stuId = c.Id }
                select new ComplexExamResult
                {
                    Id = c.Id,
                    Firstname = st.Firstname,
                    SubjectName = s.SubjectName
                }).Where(c => c.Id == classId).AsNoTracking().ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多