2012-10-31 120 views
0

有人能幫我完成這個linq左外連接查詢,以便右表(tempData)的第二列包含在結果集中,即使它可能爲空?Linq左外連接中的多列

sortedData = From cs In mbCustomSort 
      Order By cs(0) 
      Group Join entry In tempData On cs(joinColumn) Equals entry(0) Into Group 
      From last In Group.DefaultIfEmpty _ 
      Select New With {.groupField = cs(joinColumn)} 
+0

什麼是mbCustomSort,customsort和tempData? –

+0

對不起,mbcustomsort和tempData是數據表。你應該閱讀cs – groobie

+0

這是否工作:'用{.groupField = cs(joinColumn),.SecondRight = last(1)}'選擇新的? –

回答

0

對不起,我寫在C#,但關於如何:

var sortedData = from cs in mbCustomSort orderby cs.JoinColumn 
    join entry in tempData on cs.JoinColumn equals entry.OtherJoinColumn into Group 
    from subentry in Group.DefaultIfEmpty() 
    select new { groupField = cs.JoinColumn }; 
+0

謝謝,但不是還只是返回一列嗎? – groobie

+0

您想要返回什麼? – Colin

+0

'select new {groupField = cs.JoinColumn,subentry}' – Colin

0

(編者)

From last In Group轉動外連接到內連接。通過「內存查詢」對象的屬性

sortedData = From cs In mbCustomSort 
    Order By cs(0) 
    Group Join entry In tempData On cs(joinColumn) Equals entry(0) Into Group 
    Select New With {.groupField = cs(joinColumn), 
         .col2 = Group(1).RightColumn } 

變化RightColumn:當你繼續Group變量不會出現這種情況。

+0

這幾乎做,但在結果集的第二列的內容存放名爲「內存查詢」包含右表中的兩列的對象 - 但感謝越來越接近解決。有沒有其他人有任何想法? – groobie

+0

好的,所以它可能類似'From row In Group Select row(1).RightColumn'? –

+0

類似的東西,但該語法不起作用:-) – groobie

0

LINQPad的默認處理不允許item(fieldno),所以我從here改變用途的數據使用的實際字段名,其中包括在MbcMbtd沒有相應OrderId添加一個新行。這個工作對我來說:

From cs In Mbcs _ 
Order By cs.Catalogid _ 
Group Join entry In mbtds On cs.OrderId Equals entry.OrderId Into Group _ 
From last In Group.DefaultIfEmpty _ 
Select cs.OrderId, last.Ocardtype 

並以「作品」我的意思是我添加的行會出現一個Ocardtype(以及另一行,其中Ocardtype已經null)。