繁体   English   中英

基于联接表向LINQ查询添加计数列

[英]Adding Count Column to LINQ query Based on Joined Table

因此,我已经创建了一个SQL视图,该视图可以提供所需的信息。 从本质上讲,这是一个工作职位空缺系统,用于显示已批准或填补(或分配)了多少个职位。

SELECT Companies.Name AS Company, Grades.Name AS Grade, Series.Name
AS Series, Positions.Authorized, COUNT(People.PersonId) AS Assigned

FROM Companies INNER JOIN
     Positions ON Companies.Id = Positions.CompanyId INNER JOIN
     Series ON Positions.SeriesId = Series.Id INNER JOIN
     Grades ON Positions.GradeId = Grades.Id INNER JOIN
     People ON Positions.CompanyId = People.CompanyId AND
     Positions.SeriesId = People.SeriesId AND Positions.GradeId = People.GradeId

GROUP BY Companies.Name, Grades.Name, Series.Name, Positions.Authorized

授权的SQL查询

现在,我想做的就是在LINQ查询中重新创建它。 我几乎在需要的地方得到它; 但是,我不知道如何在基于People表的末尾添加计数列。

这是我当前的LINQ查询:

var query = from a in db.Companies
            join b in db.Positions on a.Id equals b.CompanyId
            join c in db.Series on b.SeriesId equals c.Id
            join d in db.Grades on b.GradeId equals d.Id
            join e in db.People on new { b.CompanyId, b.SeriesId, b.GradeId } equals new { e.CompanyId, e.SeriesId, e.GradeId }
            group a by new { CompanyName = a.Name, GradeName = d.Name, SeriesName = c.Name, b.Authorized, e.PersonId } into f
            select new { Company = f.Key.CompanyName, Grade = f.Key.GradeName, Series = f.Key.SeriesName, f.Key.Authorized, Assigned = /* needs to be Count(People.PersonId) based on last join */ )};

预先感谢您提供的任何帮助!

弄清楚了。 之所以发布多行而不是对同一行进行正确计数,是因为在我的“ group by”中,我应该在应该简单删除的情况下在“ e.PersonId”中添加它。 我还必须添加一些内容以使其在前端剃刀视图上工作,因为它是匿名类型(这与原始问题无关,但以为我会给出更改的理由)。 所以删除答案的人,您在某种程度上是正确的,但之所以无效,是因为该组中的其他字段:

dynamic query = (from a in db.Companies
                    join b in db.Positions on a.Id equals b.CompanyId
                    join c in db.Series on b.SeriesId equals c.Id
                    join d in db.Grades on b.GradeId equals d.Id
                    join e in db.People on new { b.CompanyId, b.SeriesId, b.GradeId } equals new { e.CompanyId, e.SeriesId, e.GradeId }
                    group a by new { CompanyName = a.Name, GradeName = d.Name, SeriesName = c.Name, b.Authorized } into f
                    select new { Company = f.Key.CompanyName, Grade = f.Key.GradeName, Series = f.Key.SeriesName, Authorized = f.Key.Authorized, Assigned = f.Count()}).AsEnumerable().Select(r => r.ToExpando());

以及页面上的外观:

转换后的授权LINQ剃须刀页面样本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM