1

名前、メールアドレス、携帯電話で生徒の詳細を検索しようとしています。このために、名前、電子メール、モバイル用の3つのテキストボックスがあります。

そして、私のコードでは、次のような詳細を取得しようとしました。

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に同じ値を付けて、そのリストを完全に電子メールで送信しようとしました。また、を含む名前で検索するsham場合はsham、名前などを電子メールとモバイルに入力すると、これも完璧に機能しています...

これから私が知ったのは、すべてのパラメーターに何らかの値が必要であるということです。なぜこれがこのようになるのかわからないのですが、これを修正する方法がわからないので、誰かがここで私を助けてくれますか。前もって感謝します

4

1 に答える 1

3

おそらく、すべての文字列に空の文字列が「含まれる」ため、テキストボックスの一部が空の場合、trueすべての学生名に対して「OR」条件の一部が返され、すべての学生が取得されます。クエリを次のように変更してみてください。

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こともできます。しかし、LINQ to Entities がこの方法を受け入れるかどうかはわかりません。string.IsNullOrEmpty(XXX.Text)null

編集

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 に答える