[解決済み] LINQ: フィルタリング基準で SingleOrDefault と FirstOrDefault() を使用する場合
2022-03-01 17:35:48
質問
IEnumerableの拡張メソッドについて考えてみましょう。
SingleOrDefault()
と
FirstOrDefault()
というMSDNドキュメント
SingleOrDefault
:
シーケンス内の唯一の要素、あるいはシーケンスが空の場合はデフォルト値を返します。シーケンス内に複数の要素がある場合は、このメソッドは例外をスローします。
一方
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クエリで使用することはできますか?
どのように解決するのですか?
を使用する場合は、必ず
SingleOrDefault
を返すと明記しています。
シングル
の結果が得られます。一方
FirstOrDefault
を使用すると、クエリは任意の数の結果を返すことができますが、最初の1つだけが必要であることを指定します。
個人的にはセマンティクスが大きく異なるので、期待する結果に応じて適切な方を使うことで、可読性が向上すると思います。
関連
-
[解決済み] async」と「await」の使い方とタイミング
-
[解決済み] LINQで.Firstと.FirstOrDefaultを使用するタイミングは?
-
[解決済み] LINQ を使用して、ある List<> にある項目を別の List<> にない項目として取得する。
-
[解決済み] LINQを使用して、プロパティ値の最小または最大値を持つオブジェクトを選択する方法
-
[解決済み] LINQとLambdaでJoin/Whereを実現する
-
[解決済み] LINQによる順序の保持
-
[解決済み] LINQは結果が空の場合、何を返すのですか?
-
[解決済み】LINQでリストをサブリストに分割する
-
[解決済み】LinqでCast()とOftype()を使用するタイミングについて
-
[解決済み】ArrayとList<T>の比較。いつどちらを使うか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プラットフォームが同じでも「不正なフォーマットでプログラムを読み込もうとしました。
-
[解決済み] [Solved] ファイル *.mdf をデータベースとしてアタッチできない
-
[解決済み] Microsoft.Practices.ServiceLocationはどこから来たのですか?
-
[解決済み] "ItemsSourceを使用する前に、Itemsコレクションを空にする必要があります。"
-
[解決済み] スマートクライアント・ソフトウェアファクトリーの体験談
-
[解決済み] WPFで角丸ボタンを作成する/作るには?
-
[解決済み] LINQ to Entitiesはメソッドを認識しません。
-
[解決済み] 実際のサービスはデータを返すのに、なぜWebServiceはnullを返すのですか?
-
[解決済み] PowerShellで文字列がNULLまたは空であるかどうかを確認するにはどうすればよいですか?
-
[解決済み】Entity Frameworkから1つのレコードを削除しますか?