web-dev-qa-db-ja.com

LINQ to SQLで単一レコードの結果を取得する最良の方法

次のようにキーフィールドの条件を使用してテーブルをクエリした場合:

        var user = from u in dc.Users
                   where u.UserName == usn
                   select u;

結果がゼロになるか、結果が1つになることを知っています。まだ先に進んで、for-eachを使用して結果を取得する必要がありますか、それともこの種の状況を処理する別の好ましい方法がありますか。

43
Tony Peterson

次のようなものを試してください:

var user = (from u in dc.Users
                   where u.UserName == usn
                   select u).FirstOrDefault();

FirstOrDefault メソッドは、指定された条件を満たすシーケンスの最初の要素、またはそのような要素が見つからない場合のデフォルト値を返します。

77
Jorge Ferreira

どうして

var user = dc.Users.SingleOrDefault(u=> u.UserName==usn);
18
Danimal

また、First/FirstOrDefault/Single/SingleOrDefaultは、LINQ to Sqlコマンドの実行ポイントであることに注意してください。 LINQステートメントはそれまで実行されていないため、生成されたSQLに影響を与えることができます(たとえば、sqlコマンドにTOP 1を追加できます)

5
James Curran

First()またはFirstOrDefault()を使用します。

違い:First()では、行が見つからない場合に例外がスローされます。

4
Sam

SingleOrDefaultメソッドを使用します。

var user = (from u in dc.Users
                   where u.UserName == usn
                   select u).SingleOrDefault();
1
Joel Cunningham

別のオプションは、「==」ではなく、Contains(username)を使用することです

var user = (from u in dc.UserInfo 
                      where u.Users.Contains(username) 
                      select u).SingleOrDefault();
0