2015-06-24 37 views
1

當我們有兩個表,一個爲零或一個關係。 tableA中可能有記錄,tableB中沒有相應的記錄。
所以Join操作結果爲這些記錄的空值。 我的目標是用一個defalut值替換這些空值。
我的問題是我們如何在數據庫環境和C#上下文(當我們有標準的C#集合,而不是數據庫表)使用LINQ來做到這一點?設置linq連接結果中空值的缺省值

實施例表:

tableA{id , name , info} 
    tableB{id , tableAid , number} 

查詢:在結果

var result= from a in tableA join b in tableB on b.tableAid equals a.id 
      select new {id = a.id , name = a.name , number = b.number } 

數目可以爲空如果TableB中沒有記錄在表A中的特定記錄。
我需要這樣一件事:

if(result[i].number==null)result[i].numer=1 
+0

你能發表更多信息嗎?表,linq查詢,... – Mivaweb

回答

2

你需要使用左側加入LINQ爲您的方案, 之後@Patrick Hofman's代碼將工作

var result= from a in tableA join b in tableB on b.tableAid equals a.id 
      into grp from c in grp.DefaultIfEmpty() 
      select new {id = a.id , name = a.name , number = c != null ? (c.number ?? 0) : 0 } 
+0

好點。我錯過了這部分查詢! –

+0

它的工作,謝謝。請多說明,這種情況下如何分組? – Hamed

+0

@hamednasari,你可以在這裏找到更好的解釋https://msdn.microsoft.com/en-us/library/bb397895.aspx –

1

如果b是空的,因爲它不能在另一端中找到,您可以使用null檢查與ternary operator,可能與null-coalescing operatorb.number合併:

number = b != null ? (b.number ?? 0) : 0; 
+0

它聽起來比[這可能]更簡單(http://stackoverflow.com/questions/16333068/how-do-i-add-default-null-values-in-a-linq-加入聲明#16333956)approach.i猜不需要? – Hamed

+0

我想不是。你試過了嗎? –

+0

它不起作用,因爲它無法找到,它甚至在連接結果中都沒有被檢查! – Hamed