[c#] FirstFirstOrDefaultとLINQをいつ使用するのか。


Answers

.First結果がない場合は例外がスローされます。 .FirstOrDefaultはそうではなく、null(参照型)または値型のデフォルト値のいずれかを返します。 (例えば、intの場合は0と同じです。)ここでの質問は、デフォルトの型を必要とするときではありませんが、それ以上:例外を扱うか、デフォルト値を扱いますか? 例外は例外的なものでなければならないので、 FirstOrDefaultは、クエリから結果を取得するかどうか不明な場合に優先されます。 論理的にデータがそこになければならないときは、例外処理が考慮される。

Skip()Take()は通常、結果にページングを設定するときに使用されます。 (最初の10個の結果と次の10個の次のページなどを示すように)

お役に立てれば。

Question

私は検索してきましたが、いつ.FirstOrDefaultとLINQを使いたいのか、いつ使う.Firstかについて明確な答えは見つかっていません。

  • いつあなたが.First ? 返された結果がない場合に例外をキャッチしたいときのみ?

    var result = List.Where(x => x == "foo").First();
    
  • .FirstOrDefaultいつ使用し.FirstOrDefaultか? 結果が表示されない場合はいつもデフォルトのタイプが必要ですか?

    var result = List.Where(x => x == "foo").FirstOrDefault();
    
  • そして、そのことについて、Takeについてどうですか?

    var result = List.Where(x => x == "foo").Take(1);
    



最初()

  1. シーケンスの最初の要素を返します。
  2. 結果に要素がなくなるか、またはソースがnullの場合、エラーがスローされます。
  3. 複数の要素が必要で、最初の要素だけが必要な場合は、それを使用する必要があります。

FirstOrDefault()

  1. シーケンスの最初の要素を返します。要素が見つからない場合はデフォルト値を返します。
  2. ソースがnullの場合のみエラーをスローします。
  3. 複数の要素が必要で、最初の要素だけが必要な場合は、それを使用する必要があります。 結果が空であれば良い。

UserInfosテーブルがあり、以下に示すレコードがあります。 下の表に基づいて私は例を作成しました...

First()の使い方

var result = dc.UserInfos.First(x => x.ID == 1);

ID == 1のレコードは1つだけです。このレコードを返す必要があります
ID:1ファーストネーム:マニッシュ姓:Dubeyメール:xyz@xyz.com

var result = dc.UserInfos.First(x => x.FName == "Rahul");   

FName == "Rahul"の複数のレコードがあります。 最初のレコードは返品する必要があります。
ID:7名前:Rahul姓:Sharmaメールアドレス:xyz1@xyz.com

var result = dc.UserInfos.First(x => x.ID ==13);

ID == 13のレコードはありません。エラーが発生するはずです。
InvalidOperationException:シーケンスに要素が含まれていない

FirstOrDefault()を使用する方法

var result = dc.UserInfos.FirstOrDefault(x => x.ID == 1);

ID == 1のレコードは1つだけです。このレコードを返す必要があります
ID:1ファーストネーム:マニッシュ姓:Dubeyメール:xyz@xyz.com

var result = dc.UserInfos.FirstOrDefault(x => x.FName == "Rahul");

FName == "Rahul"の複数のレコードがあります。 最初のレコードは返品する必要があります。
ID:7名前:Rahul姓:Sharmaメールアドレス:xyz1@xyz.com

var result = dc.UserInfos.FirstOrDefault(x => x.ID ==13);

ID == 13のレコードはありません。戻り値はnullです。

First()またはFirstOrDefault()いつ使用するかを理解するのに役立ちます。




FirstOrDefaultの必要性を説明するウェブサイトを見つけました
http://thepursuitofalife.com/the-linq-firstordefault-method-and-null-resultsets/
クエリに結果がなく、First()またはSingle()を呼び出して単一の行を取得する場合は、「要素に要素が含まれていない」という例外が発生します。

免責事項:私はLINQを一度も使用していません。




linqコレクションの単一の単純なクエリを実装する多くの方法、私たちはSQLで結合を記述するだけで、フィルタは最初と最後に必要性と必要性​​に応じて適用することができます。

ここでは、コレクション内のidを持つ要素を見つける例を示します。 これをさらに追加するには、 FirstOrDefaultメソッドは、コレクションに少なくとも1つのレコードがある場合、同じものを返すのが理想的です。 ただし、コレクションが空であれば大丈夫です。 Firstは例外を返しnullが、 FirstOrDefaultnullまたはデフォルトを返します。 たとえば、 intは0を返します。したがって、このような使用は個人的な好みだが、 FirstOrDefaultを使用して例外処理を回避するほうがよい。




最初:

  • シーケンスの最初の要素を返します。
  • 例外をスローする:結果に要素がない
  • 次の場合に使用する:1つ以上の要素が予想され、最初の要素

FirstOrDefault:

  • シーケンスの最初の要素を返します。要素が見つからない場合はデフォルト値を返します。
  • 例外をスローします。ソースがnullの場合のみ
  • 次の場合に使用します:1つ以上の要素が必要で、最初の要素のみが必要な場合。 また、結果が空であればOKです

送信元: http://www.technicaloverload.com/linq-single-vs-singleordefault-vs-first-vs-firstordefault/ : http://www.technicaloverload.com/linq-single-vs-singleordefault-vs-first-vs-firstordefault/




このタイプの関数は要素演算子に属します。いくつかの有用な要素演算子を以下に定義します。

  1. First / FirstOrDefault
  2. Last / LastOrDefault
  3. Single / SingleOrDefault

特定の条件に基づいてシーケンスから単一の要素を選択する必要があるときは、要素演算子を使用します。 ここに例があります。

  List<int> items = new List<int>() { 8, 5, 2, 4, 2, 6, 9,2,10};

First()演算子は、条件を満たすシーケンスの最初の要素を返します。 要素が見つからない場合は、例外が発生します。

int result = items.Where(item => item == 2).First();

FirstOrDefault()演算子は、条件を満たすシーケンスの最初の要素を返します。 要素が見つからなければ、その型のデフォルト値を返します。

int result1 = items.Where(item => item == 2).FirstOrDefault();




最初()

結果に1つ以上の要素が含まれていることがわかっている場合は、シーケンスの最初の要素のみを使用してください。

FirstOrDefault()

FirstOrDefault()は、指定された条件に一致する要素がない場合、基本的なタイプのジェネリックコレクションのデフォルト値を返す以外、First()と同じです。 要素が見つからない場合、InvalidOperationExceptionをスローしません。 しかし、要素またはシーケンスのコレクションは例外をスローするよりもnullです。




Related



Tags

c# c#   .net .net   linq