2011-05-23 107 views
1
Dim ds = From a In db.Model 
      Join b In db.1 On a.id Equals b.ID 
      Join c In db.2 On a.id Equals c.ID 
      Join d In db.3 On a.id Equals d.ID 
      Join f In db.4 On a.id Equals f.ID 
    Select a.id, a.Ref, a.Type, a.etc 

以上是我的linq查詢。目前,我只有當前有60行時返回數據庫的第一行。請你能告訴我哪裏出錯了,以及如何選擇所有記錄。Linq查詢只返回1行

在此先感謝!

UPDATE:

當我拿出所有的連接,像這樣:

Dim ds = From a In db.1, b In db.2, c In db.3, d In db.4, f In db.5 
Select a.id, a.Ref, a.type, b.etc, c.etc, d.etc 

我得到一個system.outofmemory例外!

+1

你如何使用查詢的結果? – 2011-05-23 12:36:37

+0

我綁定到一個gridview,然後導出到xls – Phil 2011-05-23 12:38:20

+2

如果你運行相應的SQL(包含所有連接),你會得到全部60行嗎? – Oded 2011-05-23 12:39:20

回答

2

只有當所有的連接匹配 - 換句話說,當有一行從Model帶有AP,選項,對話和發票時,您纔會獲得一行。我的猜測是,只有其中一個。

LINQ默認進行內部連接。如果您正在尋找一個左外連接(即某一行可能沒有發票或Talk等),那麼您需要使用組連接,通常與DefaultIfEmpty一起使用。

我對VB語法不是特別熱,但this article看起來像是你在做什麼。

+0

這聽起來就像我在找的東西! – Phil 2011-05-23 12:45:10

+0

謝謝jon,這導致我的解決方案:0) – Phil 2011-05-24 07:27:03