Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果序列不包含任何元素,则显示消息框_C#_Linq - Fatal编程技术网

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();

我正在使用以下代码在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();
  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
。哇!没想到这会这么容易。非常感谢你。它工作得很好!