來自T-SQL,我試圖在示例ASP.Net mvc(c#)程序中使用基本數據集。Linq - 加入表的主鍵
我有三個表,如下面的照片(連接的)中所示:
- 類別(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中創建第二個連接(更不用說左連接)。
我以前只是用:
var CollectionSprints = db.Collections.Include(d => d.Sprints)
但我需要的所有項目(deployDocuments)以及求和的,所以現在我想起來討價還價的查詢,像這樣:
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
但是一旦我開始第二次連接,它會拋出錯誤,我是否應該閱讀linq的限制?我應該採取一種完全不同的方法來解決這個問題嗎?或者我應該只是GTFO並在C#上採取更多課程。
爲什麼你不能使用存儲過程呢?你決定使用LINQ嗎? –
我完全可以使用這個存儲過程,但我還沒有學會如何使用存儲過程與asp.net mvc,但我相信我可以快速學習。這是一個「複雜」的查詢在linq中執行嗎? **編輯:**我猜我的看法有點偏斜,因爲我不習慣爲長度小於10-15行的查詢創建存儲過程,最好的做法是將SP用於所有不是' 「基本」查詢? –
「LEFT JOIN」會變得複雜。我並不是說它不可行,只是在你的關卡中,使用存儲過程可能更容易。 –