HOW TO:處理查詢運算式中的 Null 值 (C# 程式設計手冊)
更新:2007 年 11 月
這個範例會示範如何處理來源集合中的可能 null 值。IEnumerable<T> 一類的物件集合可以包含其值為 null 的項目。如果來源集合為 null,或是包含值為 null 的項目,而且您的查詢不會處理 null 值,這樣當您執行該查詢時,便會擲回 NullReferenceException。
範例
您可以用防禦方式來撰寫程式碼,以避免發生下列範例中所示的 null 參考例外狀況 (Exception):
var query1 =
from c in categories
where c != null
join p in products on c.ID equals
(p == null ? null : p.CategoryID)
select new { Category = c.Name, Name = p.Name };
在上述範例中,where 子句會篩選掉分類序列 (Sequence) 中的所有 null 項目。這項技巧與 join 子句中的 null 檢查無關。在此範例中具有 null 值的條件運算式可以運作,因為 Products.CategoryID 的型別為 int?,而這是 Nullable<int> 的簡略表示法。
在 join 子句中,如果只有一個比較索引鍵是可為 Null 的實值型別,您就可以在查詢運算式中將另一個索引鍵轉型成可為 Null 的型別。在下列範例中,假設 EmployeeID 是包含 int? 型別之值的資料行:
void TestMethod(Northwind db)
{
var query =
from o in db.Orders
join e in db.Employees
on o.EmployeeID equals (int?)e.EmployeeID
select new { o.OrderID, e.FirstName };
}