2017-04-25 84 views
1

添加计数列到LINQ查询所以我有,我已经创建了一个提供我什么,我需要一个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 

Authorized SQL Query

现在我希望能够做的就是在LINQ查询重新创建。我几乎可以在需要的地方找到它;然而,我无法弄清楚如何在这是基于该人民表末尾添加计算列。

这是我目前的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 */)}; 

预先感谢任何帮助,您可以提供!

回答

0

想通了。之所以发布多行,并没有对同一行进行正确的计数,是因为在我的“group by”中,我在“e.PersonId”中添加了它,应该只是简单地删除它。我也不得不添加一些东西,使它的前端剃刀意见工作,因为它是一个匿名类型(这不会有什么做与原来的问题,但认为我给的理由需要改变)。那么,谁去除了他们的答案的人,你是部分正确的,但它不工作的原因是因为附加fieldin组由:

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()); 

而且它是什么样子的网页上:

Converted Authorized LINQ razor page sample