T-SQLから来て、私はASP.Net mvc(c#)の例で基本的なデータセットを使って作業しようとしています。Linq - 結合されたテーブルのプライマリキーに結合
写真下(リンク)に示したように、私は3つのテーブルを持っている:
- コレクション(PK IdCollection)
- スプリント(PK IdSprint、FK IdCollection)
- DeployDocuments(PKのIdDeployDocuments、FK IdSprint私のasp.net MVCの続きで)
ローラーは、私が見るに、この単純なクエリのLINQ同等のデータセットを渡したいと思います:
SELECT
c.TxCollectionName
,s.SprintNumber
,COUNT(dd.IdDeployDocument) [NumProjects]
FROM Collections AS c
JOIN Sprints AS s
ON s.IdCollection = c.IdCollection
LEFT JOIN DeployDocuments AS dd
ON dd.IdSprint = s.IdSprint
GROUP BY
c.TxCollectionName
, s.SprintNumber;
私は、私の人生のために、これを行う方法を見つけ出すことはできません! すぐに私はlinqで2番目の結合を作成しようとしました。
var query = from Collections in db.Collections
join Sprints in db.Sprints on Collections.IdCollection equals Sprints.IdCollection
join DeployDocuments in db.DeployDocuments on DeployDocuments.IdSprint equals Sprints.IdSprint
:私は、クエリそうのように一緒に値切るしようとしているので、今、
var CollectionSprints = db.Collections.Include(d => d.Sprints)
しかし、私は同様にすべてのプロジェクト(deployDocuments)の合計が必要になります。
私は以前にちょうど使用していました
しかし、すぐに私が2番目の参加に落ちると、それはエラーを投げている、そこに私が読んでくださいlinqの制限はありますか?この問題を解決するために私が取るべき全く異なるアプローチがありますか?または、私はGTFOだけで、Cでもっとコースを取るべきですか?
は、なぜあなたは、このためにストアドプロシージャを使用することはできません。
は、ここで私が思い付いた何ですか? LINQを使用することに決めましたか? –
私は絶対にこれでストアドプロシージャを使用することができます、私はまだasp.net mvcでストアドプロシージャを使用する方法を学んでいないが、私は十分に迅速に学ぶことができると確信しています。これはlinqで実行する "複雑な"クエリですか? **編集:** 10-15行未満のクエリのストアドプロシージャを作成するのに慣れていないので、私の知覚は少し歪んでいると思いますが、それ以外の場合はSPを使用することをお勧めします。 "基本"クエリ? –
LEFT JOINは複雑になります。私はそれが実行可能ではないと言っていない、ちょうどあなたのレベルでは、それはストアドプロシージャに行くことは簡単かもしれない。 –