【问题标题】:How to get data in Linq to EF join between four tables using count?如何使用计数在四个表之间获取 Linq 中的数据到 EF 连接?
【发布时间】:2018-12-25 11:32:44
【问题描述】:

我正在尝试使用 Linq to Ef 获取数据我是 Linq 的新手,

我有桌子,

*region having region_id , region_name
*governorate having governorate_id,governorate_name, region_id
*Student having id,governorate_id
*Teachers having id,governorate_id

我想通过使用一个 linq to EF 查询来查找每个区域下的学生和教师的数量

我尝试在 sql 查询中这样做,就像只针对学生,

select R.region_id,R.region_name , count(IR.Id) as Individual from region R 
inner join governorate G
           on r.region_id=g.region_id
inner join Student IR
            on g.governorate_id=IR.governorate_id
group by R.region_id,R.region_name

希望您的建议

【问题讨论】:

  • 请显示包含导航属性的类模型。如果有适当的导航属性,这应该是微不足道的。
  • @Gert 没有我已经检查过的导航属性 :)
  • 那就不要再伤害自己了,创造它们吧!真的,这就是 LINQ to Entities 的强大之处。

标签: .net sql-server entity-framework linq join


【解决方案1】:

由于您也使用 Ef,我建议您正确设置实体之间的关系,这样您就不需要自己构建连接查询(并使用 Include 子句)。

例如:

public class Region
{
    public int Id { get; set; }
    public string Name { get; set; }

    public ICollection<Governorate> Governorates { get; set; }
}

public class Governorate
{
    public int Id { get; set; }
    public string Name { get; set; }

    public int RegionId { get; set; }
    public Region Region { get; set; }

    public ICollection<Student> Students { get; set; }
}

public class Student
{
    public int Id { get; set; }

    public int GovernorateId { get; set; }
    public Governorate Governorate { get; set; }
}

希望对你有帮助

更新一个可能对您有帮助的查询:

var result = whatever.Regions
            .Include(r => r.Governorates)
            .ThenInclude(g => g.Students)
            .GroupBy(r => new {r.Id, r.Name})
            .Select(g => new
            {
                g.Key.Id,
                g.Key.Name,
                Individual = g.Count(r => r.Id)
            }).ToList();

问候

【讨论】:

    【解决方案2】:

    在一个查询中计算学生和教师:

    var teachersStudents =
        (
            from r in db.Region
            join g in db.Governorate on r.region_id equals g.region_id
            join s in db.Student on g.governorate_id equals s.governorate_id
            join t in db.Teacher on g.governorate_id equals t.governorate_id
            group new { r, s, t } by new { r.region_id, r.region_name }
            into grp
            select new
            {
                grp.Key.region_id,
                grp.Key.region_name,
                CountStudents = grp.Select(s => s.s.id).Distinct().Count(),
                CountTeachers = grp.Select(t => t.t.id).Distinct().Count()
            }
        ).ToList();
    

    【讨论】:

    • @setup 但我还需要在此 linq 查询中为教师返回
    • 感谢您的努力,但需要使用一个 Linq 查询来获取学生和老师的数量,而不是分开计算
    猜你喜欢
    • 2023-03-07
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多