[解決済み】LINQ SingleとFirstの比較
2022-04-18 04:37:54
質問
LINQです。
を使う方が効率的なのでしょうか?
Single()
演算子を
First()
を返すことが確実な場合、そのクエリーは
単一のレコード
?
違いはあるのでしょうか?
どのように解決するのですか?
Singleレコードを期待する場合は、常にコードで明示するのがよいでしょう。
他の人が、どちらかを使う理由を書いているのは知っていますが、私は、以下のような場合に、どちらかを使ってはいけないという理由を説明しようと思いました。 意味 もう一方は
注:私のコードでは、一般的に
FirstOrDefault()
と
SingleOrDefault()
が、それはまた別の問題です。
例えば、以下のようなテーブルがあるとします。
Customers
を使用し、異なる言語でのコンポジットキー(
ID
,
Lang
):
DBContext db = new DBContext();
Customer customer = db.Customers.Where( c=> c.ID == 5 ).First();
上記のコードでは、ロジックエラーが発生する可能性があります(追跡は困難です)。これは複数のレコードを返しますが(顧客のレコードが複数の言語で書かれていると仮定して)、常に最初のものだけを返します。これは予測不可能です。
を返すことを意図しているので、Single
Customer
使用
Single()
;
次のようにすると、例外が発生します(この場合、例外が発生することが望ましいのですが)。
DBContext db = new DBContext();
Customer customer = db.Customers.Where( c=> c.ID == 5 ).Single();
そして、自分のおでこを叩いて、こう言うのです。おっと! 言語フィールドを忘れていた! 以下が正しいバージョンです。
DBContext db = new DBContext();
Customer customer = db.Customers.Where( c=> c.ID == 5 && c.Lang == "en" ).Single();
First()
は、次のような場面で有効です。
DBContext db = new DBContext();
NewsItem newsitem = db.NewsItems.OrderByDescending( n => n.AddedDate ).First();
これは1つのオブジェクトを返し、ソートを使用しているので、返されるのは最も新しいレコードになります。
使用方法
Single()
のように、常に1レコードを返すように明示的に指定すると、ロジックエラーを回避することができます。
関連
-
[解決済み] LINQ: フィルタリング基準で SingleOrDefault と FirstOrDefault() を使用する場合
-
[解決済み] LINQで複数の "order by "を使用する
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] 特定のプロパティに対するLINQのDistinct()
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] LINQで.Firstと.FirstOrDefaultを使用するタイミングは?
-
[解決済み] IEnumerable<T> / IQueryable<T>の動的なLINQ OrderBy
-
[解決済み] LINQクエリでToList()とToArray()のどちらを呼び出すのが良いですか?
-
[解決済み] LINQを使用して、プロパティ値の最小または最大値を持つオブジェクトを選択する方法
-
[解決済み] LINQ .Any VS .Exists - 違いは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] データテーブルの並べ替え
-
[解決済み] .net 4.5アップグレード後、System.Web.Httpが見つからない
-
[解決済み] VS2017/2015 で .xproj ファイルを開く方法
-
[解決済み] VB.NETでファイル名を一意のサフィックスに変更するには?
-
[解決済み] "SSL/TLSセキュアチャネルの信頼関係を当局と確立できませんでした "の解決方法
-
[解決済み] DelphiとDelphi.NETの違いについて
-
[解決済み] Entity FrameworkとLINQ to SQLの比較
-
[解決済み] .Any() vs .Count() > 0のどちらのメソッドがより良いパフォーマンスを発揮しますか?
-
[解決済み] PowerShellで文字列がNULLまたは空であるかどうかを確認するにはどうすればよいですか?
-
[解決済み] Math.Round(2.5)はなぜ3でなく2を返すのですか?