1

我正在尝试使用学生的姓名、电子邮件或手机搜索学生的详细信息。为此,我为名称、电子邮件和移动设备设置了三个文本框。

在我的代码中,我试图获取这些详细信息,例如,

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

当我调试这个时,我尝试sham,sham,sham为 name,mobile 和 email 它的列表完美地提供相同的值,如果我想按包含 的 name 搜索sham,如果我输入shamname 以及 email 和 mobile 中的任何其他内容,这也很完美....

我从中了解到的一件事是,它期望所有参数都应该有一些值,我不知道为什么会这样期望,我不知道如何解决这个问题,谁能在这里帮助我。提前致谢

4

1 回答 1

3

也许,每个字符串都“包含”一个空字符串,因此如果某些文本框为空,则某些“或”条件将为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 一起使用,我在自己的代码中发现了一个查询,可以毫无问题地使用它,因此检查空字符串和 for 的更好解决方案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))
{
    //
}
于 2012-07-11T11:42:28.873 回答