這個做法在介紹 LINQ 中 Single、First、Last、SingleOrDefault、FirstOrDefault、LastOrDefault 這幾個擴充方法。
我們常常在處理集合數據的時候常常需要讀取出第一個元素之類的操作,或者判斷集合之中是否存在任何數據,這種時候就可以使用上面提到的擴充方法。
例如下面這個 Single 擴充方法可以檢查集合中是否只有一個元素,如果大於一個元素就會拋出 InvalidOperationException
通知目前集合中元素大於一個,特別的是它沒有延遲處理的特性,只要你一運作馬上就會進行檢查。
var ll = new List<int>() { 2 };
ll.Single()
如果你想要的是最多只能有一筆數據不然就沒有數據,可以改用 SingleOrDefault 方法,為一的區別是 SingleOrDefault 查不到結果時回傳的值 會為預設值,在這個例子是值型別所以預設值是 0。
var ll = new List<int>() {};
ll.SingleOrDefault();
假設今天只是想把集合中的第一個元素讀取出來可以用 First 與 FirstOrDefault,用起來也相同只是它可以允許元素包含一個元素以上。
var ll = new List<int>() { 1, 1 };
ll.First();
ll.FirstOrDefault();
最後只是想把集合中的最後一個元素讀取出來可以用 Last 與 LastOrDefault。
var ll = new List<int>() { 1, 1 };
ll.Last();
ll.LastOrDefault();
通常是集合中包含多個元素的時候才會考慮用到這幾個方法,所以同時也有可能代表你的過濾不夠嚴謹,導致從資料庫中讀取過多的資料回來, 應該是優先檢查 IQueryable 是否有沒加上的過濾條件。
Summary
這個做法介紹幾個在集合中常用的讀取元素的擴充方法,關鍵還是建議 IQueryable 的過濾條件寫好一點,最好是一次查詢就只回傳正確的那一筆元素, 而不是讀取回記憶體變成 IEnumerable 才在進行過濾與排序。