在 LINQ to SQL 要取得資料庫中符合條件的第一筆資料時, 使用 First() 因為沒有符合資料而造成 exception,因此需做例外處理, 若使用 FirstOrDefault() 方式, 則就不會產生例外而直接傳回 null 或各型別的預設值.
如
如
var q = (from a in MyTable where a.Name == "A" select a).FirstOrDefault();
var q = MyTable.FirstOrDefault(a => a.Name == "A"); //寫法二
因 select 所有欄位資料, 所以無符合資料時則傳回 null
var q = MyTable.FirstOrDefault(a => a.Name == "A"); //寫法二
因 select 所有欄位資料, 所以無符合資料時則傳回 null
若 select 單一欄位資料
var q = (from a in MyTable where a.Name == "A" select a.ID).FirstOrDefault();
則依 ID 欄位型態回有不同的傳回值
Guid -> 00000000-0000-0000-0000-000000000000
DateTime -> 0001/1/1 上午 12:00:00
int -> 0
string -> null
object -> null
則依 ID 欄位型態回有不同的傳回值
Guid -> 00000000-0000-0000-0000-000000000000
DateTime -> 0001/1/1 上午 12:00:00
int -> 0
string -> null
object -> null
但若想在無符合資料時傳回指定的預設值則需使用 DefaultIfEmpty(T) 來指定我們所要的預設內容
var q = (from a in MyTable where a.Name == "A" select a.ID).DefaultIfEmpty(1).First();