if..else语句在foreach循环中不起作用

时间:2012-07-13 08:02:12

标签: asp.net

其他声明在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.";
            }
        }
    }
}

2 个答案:

答案 0 :(得分: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 = "?";
        }
    }

然而,正如Hans指出的那样,你的循环也是不必要的,因为所有的用户名都是一样的。您的代码可以简单如下:

    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.";
        }
    }

答案 1 :(得分: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.";
        }
    }
}