C# 如果序列不包含任何元素,则显示消息框
我正在使用以下代码在c#中创建一个登录表单C# 如果序列不包含任何元素,则显示消息框,c#,linq,C#,Linq,我正在使用以下代码在c#中创建一个登录表单 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();
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();
}
如果用户输入了一个有效的帐户,form1会显示出来,但是如果用户输入了无效的帐户,或者他输入的用户名和密码在数据库中不存在,我会在第三行得到一个错误,说“sequence contains no elements”
现在我的问题是,如果序列不包含元素,如何在不使用try-catch的情况下显示消息框
提前感谢我认为单身是导致异常的原因。您应该改用SingleOrDefault
s = db.Students.SingleOrDefault(r => r.Username == textboxUname.Text && r.Password == textboxPword.Text);
当集合为空时,SingleOrDefault将返回null,而不是像函数Single那样引发异常。正如Aaron所建议的,如果改用SingleOrDefault,则在这种情况下,else块就足够了。
通常,您可以使用Any()函数来测试是否存在任何元素(在本例中,与Where()结合使用)else?如果s不等于null,则显示表单,否则显示messagebox。。else{Messagebox.show(“xxx”)}是的,还有其他人所说的singleordefault。我没有一直向右滚动,假设您正在进行空检查,它已经在那里了。。mbSwitch to
db.Students.SingleOrDefault()
。这不是真的,因为Single
永远不会返回null,因此无法访问else
。无论如何,这只是一个注释而不是一个答案。你也可以将Any
与过滤器crtierion一起使用,不需要Where
。哇!没想到这会这么容易。非常感谢你。它工作得很好!