Für eine Website, die ich gerade mache, verwenden wir LINQ to Entities. Ich wurde damit beauftragt, der Website Suchfunktionen hinzuzufügen. Ich versuche, den elegantesten Weg zu finden, nach mehreren Schlüsselwörtern (Benutzer eingegeben) auf einem einzelnen Feld in der Datenbank zu suchen. Gestatten Sie mir, ein Beispiel zu geben.LINQ to Entities Durchsuchen von Texteigenschaften für mehrere Schlüsselwörter
Tabellenspalten:
Name, Description
Beispiel Reihe:
"Cookie monster", "Fluffy, likes cookies and blue"
Benutzersuche (Trennzeichen keine Rolle spielt):
"blue fluffy"
Derzeit bin ich folgendes:
public List<SesameCharacters> SearchByKeywords(string keywords)
{
List<SesameCharacters> output = new List<SesameCharacters>();
string[] k = keywords.ToLower().Split(' ');
using (SesameStreet_Entities entities = new SesameStreet_Entities())
{
IQueryable<SesameCharacters> filter = entities.SesameCharacters;
foreach (string keyword in k)
filter = ForceFilter(filter, keyword);
output = filter.ToList();
}
return output;
}
private IQueryable<SesameCharacters> ForceFilter(IQueryable<SesameCharacters> filter, string keyword)
{
return filter.Where(p => p.Description.ToLower().Contains(keyword));
}
Dies funktioniert derzeit wie erwartet, aber ich stelle mir vor es ist nicht die beste Lösung für das Problem. Fehle ich etwas, das offensichtlich ist?
HINWEIS: Dies ist AND
passend.
Sonderbare, eine Antwort hier war, habe ich es auf, dann runter, weil ich dachte, dass es falsch war, dann ging ich zurück, weil es richtig war, jetzt ist es weg. – jfar
Ja, es gab eine Antwort von casperOne, aber jemand muss es gefunden haben. Er schlug vor, einen gespeicherten Proc zu verwenden, was genau im Moment ist. –
Ich bin in der gleichen Situation ... Haben Sie eine Lösung mit LinqToEntities gefunden, oder haben Sie am Ende eine gespeicherte Prozedur verwendet? – Kjensen