2015-12-09 207 views
4

我想加入多個數據表來創建單個數據表。這是查詢。Linq加入查詢錯誤

var row = from r0w1 in dt_vi.AsEnumerable() 
      join r0w2 in dt_workcenter.AsEnumerable() 
      on r0w1.Field<int>("wcID") equals r0w2.Field<int>("iD") 
      join r0w3 in dt_recipe.AsEnumerable() 
      on r0w1.Field<int?>("curingRecipeID") equals r0w3.Field<int?>("recipe_id") join r0w4 in dt_defect.AsEnumerable() 
      on r0w1.Field<int?>("defectID") equals r0w4.Field<int?>("defect_id") into ps 
      from r0w4 in ps.DefaultIfEmpty() 
      select r0w1.ItemArray.Concat(r0w2.ItemArray.Concat(r0w3.ItemArray.Concat(r0w4.ItemArray))).ToArray(); 

foreach (object[] values in row) 
    dt.Rows.Add(values); 

我想加入r0w1 & r0w4爲LEFT OUTER JOIN。但是在這裏我得到了錯誤

對象引用不設置到對象

錯誤的實例,似乎是在

r0w4.ItemArray 

可能r0w4沒有得到任何價值。可能的原因是什麼?

+0

_May是r0w4沒有得到任何value._ ....和你檢查了嗎? –

+0

如果連接失敗,'DefaultIfEmpty'返回'null',所以你不能直接依賴那個對象中的數據。您可能需要執行空值檢查 – DarkKnight

回答

7

問題是ps.DefaultIfEmpty()將返回默認值(null在這種情況下)當沒有行匹配,因此它是引發該錯誤。

你可以這樣改變它: -

r0w3.ItemArray.Concat(r0w4 != null ? r0w4 .ItemArray : new object[] {})) 
+2

現在工作正常。感謝您的解決方案。 –