2017-02-13 5 views
-2

Ich habe eine Liste eines Modells namens Ergebnisse. Ich muss diese Werte aus der Ergebnisliste abrufen, die diese bestimmte Zeichenfolge enthalten.Um herauszufinden, ob eine Liste eine bestimmte Zeichenfolge enthält

List<Search> results = new List<Search>(); 

results = db.Users.Select(f => new Search{ Name = f.Name, Type = f.OrganizationType.Name, County = f.County.Name }).ToList(); 

results = results.Where(w => (model.Name == null || w.Name.Contains(model.Name))).ToList(); 

Während die erste Ergebnis Abfrage 5000 Zeilen zurückgibt, gibt die zweiten 0. Was ich versuche, in der zweiten Abfrage zu tun ist, wenn der Name null ist oder wenn der Name Teil einer Zeichenfolge enthält, fügen Sie zur Ergebnisliste. Fehle ich etwas?

Ich habe ein paar Links überprüfen, die mir im Grunde wie das gleiche zu tun, fragte Check if a string within a list contains a specific string with Linq

ich den Wert für model.Name überprüft haben, und es zeigt, richtig auf. Auch die Abfrage funktioniert, wenn es keine Suchzeichenfolge gibt, wenn Model.Name = null ist, bekomme ich alle Datensätze

+4

Es ist eine schlechte Übung, alle Zeilen in den RAM zu holen und danach zu filtern. Ihr SQL-Server sollte bereits die Aufgabe erfüllen, CPU-/Netzwerklast, Overhead und RAM-Auslastung zu reduzieren. – fubo

+1

Woher wissen wir, dass die Ergebnisse tatsächlich 'model.Name' enthalten? Wo ist das Set? Wir können nicht sicher sein ... auch, Sie haben es nicht mit Gehäuseproblemen zu tun. "Aaron" ist nicht dasselbe wie "Aaron". –

+0

Wer ist 'Modell' Feld, eine 'Suche'-Variable? – octavioccl

Antwort

1

Betrachten Sie diese Aussage: Name is null or if the Name contains part of a string Ich hoffe, Sie müssen ein Element in db.Users für Null und Enthält überprüfen. Eine weitere Sache, die ich hier hinzufügen muss, ist - wenn x.Name Null ist, wird die folgende .Contains wird NullReferanceException erhöhen Also müssen Sie das auch berücksichtigen. Sehen Sie sich nun die folgende Abfrage an:

List<Search> results = db.Users.Where(x=> x.Name==null || (x.Name !=null && x.Name.Contains(model.Name))) 
           .Select(f => new Search{ Name = f.Name, Type = f.OrganizationType.Name, County = f.County.Name }).ToList(); 
+0

'Contains ('foo')' wird in 'Like'% foo übersetzt % ''also sollte' ToLower() 'nicht benötigt werden, da' Like' bereits die Groß-/Kleinschreibung ignoriert – fubo

+0

Während ich verstehe, dass es Leistungsprobleme in zwei Abfragen gibt, wie unterscheidet sich meine Abfrage von der Ihren? – TheFallenOne

+0

@The_Outsider 'ToList()' schreibt das Ergebnis in Ihren RAM. Sie tun es in Ihrer Anwendung, un-Glück tut es in der SQL-Abfrage – fubo

Verwandte Themen