2009-10-14 126 views
2

想要在此查詢中使用第二個連接語句執行外部連接,我不斷收到奇怪的錯誤! (它必須是第三RedBull)LINQ中的外部連接問題

var Objeto = from t in Table1.All() 
      join su in table2.All() on t.Id equals su.Id 
      join tab2 in Table1.All() on t.PId equals tab2.Id //<-I want it here 
      select new 
      { 
       t.Field1, 
       SN = su.Field123, 
       PTN = tab2.FieldABC 
       }; 

任何幫助,將不勝感激。

[編輯] - 我忘了說,我使用的亞音速3.0,錯誤似乎是亞音速.....

+0

你要告訴我們什麼是「奇怪的錯誤」是爲了讓我們能夠幫助您 – 2009-10-14 04:49:26

+0

你可以提供一個樣本超過一個joing,其中只有一個是「外」? – hminaya 2009-10-14 04:55:23

+0

當我這樣做時,我得到:「'System.Linq.IQueryable'1 [<> f__AnonymousType1'2 [<> f__AnonymousType0'2 [x,a],System.Collections.Generic.IEnumerable'1 [w ]]]'不是序列「 – hminaya 2009-10-14 12:50:51

回答

4

執行外連接需要兩個步驟:

  1. 將連接轉換爲組連接into
  2. 對組使用DefaultIfEmpty()可生成您期望的null值,如果連接結果集爲空。

您還需要將null支票添加到您的select

var Objeto = from t in Table1.All() 
      join su in table2.All() on t.Id equals su.Id 
      join tab2 in Table1.All() on t.PId equals tab2.Id into gj 
      from j in gj.DefaultIfEmpty() 
      select new 
      { 
       t.Field1, 
       SN = su.Field123, 
       PTN = (j == null ? null : j.FieldABC) 
       }; 
+0

當我這樣做時,我得到:」System.Linq.IQueryable'1 [<> f__AnonymousType1'2 [<> f__AnonymousType0'2 [x,a],System類型的表達式。 Collections.Generic.IEnumerable'1 [w]]]'不是序列「 – hminaya 2009-10-14 05:14:51

+0

您使用的是LINQ提供程序?你確定它支持外連接嗎? – dahlbyk 2009-10-14 05:26:40

+0

我正在使用LINQ 2對象 – hminaya 2009-10-14 12:50:10