2009-07-14 88 views
1

是否可以使用LINQ來檢索可能包含空值的列表。檢索包含NULLS和Linq的列表

例如,如果我有一個左外連接,像這樣:

var query= from c in db.Customers 
       join o in db.Orders 
        on c.CustomerID equals o.CustomerID into sr 
       from x in sr.DefaultIfEmpty() 
       select x.OrderId; 

我如何得到一個列表可能看起來像{12,13的是,空,14,空,11,16,17 }?

這並沒有爲我工作:

query.ToList<decimal?>(); 

這可能嗎?

+0

你不解釋你想要那些`null`對應的。沒有訂單的客戶? – 2009-07-14 04:59:20

回答

1

LC是正確的,但它是一個有點清潔簡單將你的選擇直接轉換爲可空類型。

var query= from c in db.Customers 
       join o in db.Orders 
        on c.CustomerID equals o.CustomerID into sr 
       from x in sr.DefaultIfEmpty() 
       select (decimal?)x.OrderId; 
3

問題是x.OrderId將拋出NullReferenceExceptionx爲空。你需要檢查空第一個,然後返回屬性,如果有一個對象。例如

select x == null ? (decimal?)null : x.OrderId; 

OrderId並不十分聽起來像它應該是雖然小數...

+0

謝謝你!這一直困擾着我一段時間。欣賞你的答案。 – dan 2009-07-14 04:56:42

0

嘗試:

 
var query 
    = from c in db.Customers 
     join o in db.Orders 
     on c.CustomerID equals o.CustomerID into sr 
     select (sr != null : sr.OrderId : null); 
+0

select應該是select(sr!= null?sr.OrderId:null); – 2009-07-14 07:24:08