1

Else ステートメントが foreach ループで正しく機能しませんか? これが私のコードです。私のコードの説明に何か問題がある場合は、それがいいでしょう。

protected void getdata_Click(object sender, EventArgs e)
{
    using (var db2 = new cftzClassDataContext())
    {
        var username = (from p in db2.cftzAccounts
                        where p.username.Equals(getdata2.Text)
                        select p);
        foreach (var p in username)
        {
            if (getdata2.Text == p.username)
            {
                displayMSG.Text = "Is this correct ";
                displayData.Text = p.username;
                displayQuestionMark.Text = "?";
            }
            else
            {
                displayMSG.Text = "No User Found.";
            }
        }
    }
}
4

2 に答える 2

9

ifユーザー名が と等しいアカウントのみを含めるようにリストを既にフィルター処理しているため、ステートメントは完全に冗長ですgetData2.Text。したがって、ifテストは常に評価されtrueます。

同じ効果で、これを次のように書き換えることができます

    using (var db2 = new cftzClassDataContext())
    {
        var username = (from p in db2.cftzAccounts.Take(100)
                        where p.username.Equals(getdata2.Text)
                        select p);

        foreach (var p in username)
        {
            displayMSG.Text = "Is this correct ";
            displayData.Text = p.username;
            displayQuestionMark.Text = "?";
        }
    }

ただし、ハンスが指摘するように、すべてのユーザー名が同じになるため、ループも不要です。コードは次のように単純です。

    using (var db2 = new cftzClassDataContext())
    {
        var user = db2.cftzAccounts.
              FirstOrDefault(account => account.username.Equals(getdata2.Text));

        if (user != null)
        {
            displayMSG.Text = "Is this correct ";
            displayData.Text = user.username;
            displayQuestionMark.Text = "?";
        }
        else 
        {
            displayMSG.Text = "No User Found.";
        }
    }
于 2012-07-13T08:04:35.243 に答える
0

何を達成しようとしているのかわかりませんが、ユーザーがデータベースに存在するかどうかを確認し、存在する場合はdisplayMSGオブジェクトを構成しようとしているようです。あなたは次のようなことをすることができません

var user=db2.Single(u=> u.username==getdata2.Text);

ユーザーが見つからない場合、Singeは例外をスローします。それが気に入らない場合は、SingleOrDefault()メソッドを使用できます

protected void getdata_Click(object sender, EventArgs e)
{
    using (var db2 = new cftzClassDataContext())
    {
        try
        {
            var user=db2.Single(u=> u.username==getdata2.Text);
            displayMSG.Text = "Is this correct ";
            displayData.Text = user.username;
            displayQuestionMark.Text = "?";
        }
        catch
        {
            displayMSG.Text = "No User Found.";
        }
    }
}
于 2012-07-13T08:13:21.680 に答える