Linq-Abfrage mit Contains und Nullable-Wert
Habe ich eine Methode für die Suche, die aussieht wie diese:
public IEnumerable<Result> Search(string searchText)
{
return _context.Person.Where(x => x.Contains(searchText));
}
Ich möchte in der Lage sein, um diese Funktion aufrufen mit searchText
null/leer und erhalten Sie alle Datensätze wieder ein.
Ich haben versucht, dies ohne Glück:
return _context.Person.Where(x => x.Contains(searchText ?? ""));
gibt es einen anderen Weg um dies zu erreichen, neben breaking es in zwei Schritten und überprüfen searchString
in einer if-Anweisung, bevor Sie auf die Abfrage?
- Verwandte (aber nicht dein spezifisches problem hier): stackoverflow.com/questions/682429/...
- Ist
Contains
eine Methode IhresPerson
Klasse? Die sucht nach FirstName und LastName und so weiter? Wie hast du sogar die original version_context.Person.Where(x => x.Contains(searchText))
Arbeit mit LINQ to Entities? Können Sie diese Methode? - weblogs.asp.net/zeeshanhirani/archive/2008/04/18/...
- Ich sehe, aber die Beispiele dort sind ganz andere Typen von Abfragen, die über Ihren Fall. In dem link sind Abfragen wie
Where(x => x.City.Contains(searchText))
ist dieContains
Methode einerstring
(EF-Anbieter können die Karte, um SQL-Anweisungen) und nicht eine benutzerdefinierte MethodeContains
auf IhrePerson
Klasse wie Sie zu haben scheinen. (x
im code oben ist einPerson
und nicht einstring
.) - oh im sorry, ich habe meinen code für ein kleines Beispiel..meine ist mehr wie _context.Person.Where(x => x.Nachname.Enthält(searchText))
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kannst du es so machen:
Dies ist ein Muster, ich benutze eine Menge wenn ich Parameter, die ich anwenden möchten, nur wenn Sie gesetzt sind.
Und eine weniger effiziente Art und Weise... Nicht sicher, ob das semantisch korrekt ist, aber Sie bekommen die Idee...
oder
Unter der Annahme, dass
Person
ist eine KlasseContains
zu sein scheint-Methode dieser Klasse. Ein Ausdruck wieWhere(x => x.Contains(searchText))
oderWhere(x => string.IsNullOrEmpty(searchText) || x.Contains(searchText))
wo x ist eine Person, die nicht mit LINQ to Entities, auch mit einer einfachen Klasse wie ...... es wird eine exception werfen, weil LINQ to Entities kann nicht übersetzen diese Methode, um eine Lagerung Ausdruck.
Where(x => string.IsNullOrEmpty(searchText) || x.Name.Contains(searchText))
würde aber funktionieren.Ich versuche alle Lösungen unter Lösung funktionierte für mich
Fragen