我试图用他们的名字或电子邮件或手机搜索学生的详细信息。为此,我有三个名称,电子邮件和移动文本框。
在我的代码中,我试图获得这些细节,
DataObject entities=new DataObject();
foreach (DataObject.Student student in entities.students.Where(p =>
(p.FIRSTNAME+p.LASTNAME).Contains(txtName.Text)
|| p.MOBILE.Contains(txtMobile.Text)
|| p.EMAIL.Contains(txtEmail.Text))
{
//
}
并且在这里,如果我在电子邮件或姓名文本框中键入sham
,则列出数据库中可用的所有学生详细信息,而不是仅列出学生姓名或电子邮件,其中包含sham
。< / p>
当我调试这个时,我尝试为名称,移动设备提供相同的值sham,sham,sham
,并完美地通过电子邮件发送其列表,如果我想按名称搜索包含sham
,并且如果我在名称中键入sham
,在电子邮件和移动设备中输入任何其他内容,这也可以完美运行....
我从中得知的一点是,它希望所有的参数都应该有一些价值,我不知道为什么这样的预期,我不知道如何解决这个问题,任何人都可以帮助我。提前致谢
答案 0 :(得分:3)
也许,每个字符串“包含”一个空字符串,因此如果某些文本框为空,则某些“OR”条件将为每个学生姓名返回true
,并且您将获得所有学生。尝试将查询更改为:
foreach (DataObject.Student student in entities.students.Where(p =>
((txtName.Text != string.Empty)
? (p.FIRSTNAME+p.LASTNAME).Contains(txtName.Text)
: false)
|| ((txtMobile.Text != string.Empty)
? p.MOBILE.Contains(txtMobile.Text)
: false)
|| ((txtEmail.Text != string.Empty)
? p.EMAIL.Contains(txtEmail.Text)
: false))
{
//
}
除了XXX.Text != string.Empty
,您还可以尝试string.IsNullOrEmpty(XXX.Text)
来抓住null
案例。但我不确定LINQ to Entities是否会接受这种方法。
修改强>
string.IsNullOrEmpty(XXX.Text)
与LINQ to Entities一起工作,我在我自己的代码中发现了一个使用它而没有问题的查询,因此检查空字符串和null
的更好解决方案是:
foreach (DataObject.Student student in entities.students.Where(p =>
(!string.IsNullOrEmpty(txtName.Text)
? (p.FIRSTNAME+p.LASTNAME).Contains(txtName.Text)
: false)
|| (!string.IsNullOrEmpty(txtMobile.Text)
? p.MOBILE.Contains(txtMobile.Text)
: false)
|| (!string.IsNullOrEmpty(txtEmail.Text)
? p.EMAIL.Contains(txtEmail.Text)
: false))
{
//
}