簡體   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