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