2017-04-17 4 views
0

Ich habe dieses Teil des Codes zum Durchsuchen einer Datenbank. Ein Benutzer sollte hier 3 Möglichkeiten haben: Um nur den Nachnamen einzugeben, kann der Vorname und der Benutzer mit beiden suchen - Nachname und Vorname.Nicht obligatorische Felder in der Suche

Dieser Code ruft die Datensätze aus meiner Datenbank ab, wenn ich beide Zeichenfolgen - Nachname und Vorname - zur Verfügung stelle. Aber wenn ich nur einen von ihnen tippe, ist meine resultierende Liste immer leer.

var query = from x in db.people 
        where (txtSurname == null || x.Surname== txtSurname.Text) 
         && (txtFirstName == null || x.FirstName == txtFirstName.Text) 
        select x; 
     var data = query.ToList(); 
     peopleBindingSource.DataSource = data; 

Antwort

5

Denken Sie daran, dass eine Abfrage Entity Framework nicht an die Datenbank gesendet werden, bis Sie die Daten wth ToList oder iterieren es zum Beispiel materialisieren. Dies bedeutet, dass Sie die Abfrage in Code wie folgt erstellen können:

+1

Mit dieser Methode wird wahrscheinlich auch bessere zwischengespeicherte Abfragepläne produzieren. Sie erhalten keine schlechten Indizes aufgrund von Parameter-Sniffing von einem vorherigen Lauf, bei dem die meisten Felder nicht verwendet wurden. –

+0

Dies ist nicht genau dasselbe, wenn die Vergleichsprüfung in der Frage durchgeführt wird. if (txtSurname == null), Sie überprüfen nur, ob (txtSurname.Text). – David

+0

@David Ja, aber ich vermute, das ist ein Tippfehler, der das ursprüngliche Problem verursacht hat. – DavidG

Verwandte Themen