IEnumerable拡張メソッドSingleOrDefault()
とFirstOrDefault()
シーケンスの唯一の要素、またはシーケンスが空の場合はデフォルト値を返します。シーケンスに複数の要素がある場合、このメソッドは例外をスローします。
一方FirstOrDefault
、MSDNから(おそらく、OrderBy()
または、OrderByDescending()
またはまったく使用しない 場合)、
シーケンスの最初の要素を返します
いくつかのクエリ例を検討してください。これら2つのメソッドをいつ使用するかは必ずしも明確ではありません。
var someCust = db.Customers
.SingleOrDefault(c=>c.ID == 5); //unlikely(?) to be more than one, but technically COULD BE
var bobbyCust = db.Customers
.FirstOrDefault(c=>c.FirstName == "Bobby"); //clearly could be one or many, so use First?
var latestCust = db.Customers
.OrderByDescending(x=> x.CreatedOn)
.FirstOrDefault();//Single or First, or does it matter?
質問
あなたはどのような規則に従うか、お勧めします使用することを決定する際SingleOrDefault()
やFirstOrDefault()
、あなたのLINQクエリでは?