次のようにキーフィールドの条件を使用してテーブルをクエリした場合:
var user = from u in dc.Users
where u.UserName == usn
select u;
結果がゼロになるか、結果が1つになることを知っています。まだ先に進んで、for-eachを使用して結果を取得する必要がありますか、それともこの種の状況を処理する別の好ましい方法がありますか。
次のようなものを試してください:
var user = (from u in dc.Users
where u.UserName == usn
select u).FirstOrDefault();
FirstOrDefault メソッドは、指定された条件を満たすシーケンスの最初の要素、またはそのような要素が見つからない場合のデフォルト値を返します。
どうして
var user = dc.Users.SingleOrDefault(u=> u.UserName==usn);
また、First/FirstOrDefault/Single/SingleOrDefaultは、LINQ to Sqlコマンドの実行ポイントであることに注意してください。 LINQステートメントはそれまで実行されていないため、生成されたSQLに影響を与えることができます(たとえば、sqlコマンドにTOP 1を追加できます)
First()またはFirstOrDefault()を使用します。
違い:First()では、行が見つからない場合に例外がスローされます。
SingleOrDefaultメソッドを使用します。
var user = (from u in dc.Users
where u.UserName == usn
select u).SingleOrDefault();
別のオプションは、「==」ではなく、Contains(username)を使用することです
var user = (from u in dc.UserInfo
where u.Users.Contains(username)
select u).SingleOrDefault();