2016-09-23 10 views
1

を示して、私は、ユーザーが有効なアカウントを入力した場合、Form1がユーザ入力の無効なアカウントを示すがあればします。このコードシーケンスに要素が含まれていない場合は、メッセージボックス

DataclassesDatacontext db = new DataclassesDatacontext(); 
Student s = null 

s = db.Students.Single(r => r.Username == textboxUname.Text && r.Password == textboxPword.Text); 
if (s != null) 
{ 
    form1 frm = new form1(); 
    frm.Show(); 
} 

を使用してC#での形式でログを作成していますか入力したユーザー名とパスワードがデータベースに存在しないため、「シーケンスに要素が含まれていません」という3行目にエラーが表示されます。

私の問題は、シーケンスにtry catchを使わずに要素が含まれていない場合にメッセージボックスを表示する方法です。

おかげで、事前

+0

else? sがnullと等しくない場合は、フォームを表示し、そうでない場合はmessageboxを表示します。else {Messagebox.show( "xxx")}私は右にスクロールしませんでした。ヌルチェックをしていればそれはすでにそこにありました。mb – Aaron

+2

'db.Students.SingleOrDefault()'に切り替えます。 – itsme86

答えて

3

に私はシングルが例外の原因であると考えます。代わりにSingleOrDefaultを使用する必要があります。コレクションが空の場合

s = db.Students.SingleOrDefault(r => r.Username == textboxUname.Text && r.Password == textboxPword.Text); 

、SingleOrDefaultは、関数のシングルのような例外をスローするのではなく、nullを返します。

+0

うわー!これはとても簡単だとは思わなかった。どうもありがとうございます。それは素晴らしい作品です! – Leir

-1

代わりにSingleOrDefaultを使用すると、Aaronが示唆したように、この場合はelseブロックで十分です。 一般的には、Any()関数を使用して、要素が存在するかどうかをテストすることができます(場合によってはWhere()と組み合わせる)

+0

これは本当ではありません。なぜなら、 'Single'は決してnullを返さないので、' else'は全く到達できないからです。とにかくこれは答えよりも単なるコメントです。 – HimBromBeere

+0

また、 'Any'をフィルタ式で使用することもできます。' Where'の必要はありません。 – HimBromBeere

関連する問題