Ich versuche, eine Stichwortsuche auf einem IQueryable
Objekt zu tun, aber gibt es eine Möglichkeit, dies zu tun, ohne es zuerst in eine Liste zu konvertieren?IQueryable mit Foreach auf das Ergebnis
Mein Code:
var customers = Customer.IQueryableAll(); // Method returns IQueryable containing all customers.
var customerHolder = new List<Customer>();
foreach(var k in keywords) //keywords = List<string>
{
customerHolder.AddRange(customers.Where(x=>x.FirstName.Contains(k) || x.LastName.Contains(k) || x.CompanyName.Contains(k)).ToList())
}
return customerHolder.Distinct();
Dies funktioniert, wenn ich auf einmal die Ergebnisse angezeigt werden sollen, aber das Problem kommt, wo ich Paging tun wollen. Die Funktion würde immer noch alle Einträge aus der Datenbank vor dem Paging erhalten, was bei großen Tabellen sehr ineffizient ist. (z. B. customerHolder.Skip(5).Take(5);
)
Gibt es eine Möglichkeit, den Foreach-Suchteil in die Abfrage selbst zu integrieren?
dh.
customers.Where(x => x.Name.Contains(anythingInKeyWords));
EDIT: Zur weiteren Klarstellung, ich will zu halten die OR in den oben genannten, so Filterung und Nachfilterung mit mehreren where-Klauseln nicht. IE. Bill Job/Bill Gates> Suche Bill Gates sollte beide Einträge zurückgeben, weil Bill Matches.
Die einzige Möglichkeit besteht darin, Filterausdruck dynamisch (zu OR-Bedingungen) zu erstellen. – Dennis