2017-04-25 9 views
1

私は必要なものを提供するSQLビューを作成しました。基本的には、職位ビレッティングシステムであり、認定されたポジション数が記入されている(または割り当てられている)ことを示しています。今LINQクエリにカウント列を追加する結合テーブルに基づいて

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クエリでこれを再現しています。私はそれが必要なところにほとんど手に入れました。しかし、私はテーブルに基づいて最後にカウントされた列を追加する方法を見つけることができません。あなたが提供することができます任意の助けを事前に

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 */)}; 

ありがとう:

は、ここに私の現在のLINQクエリです!

答えて

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

関連する問題