2016-04-02 11 views
0

Was ist der beste Weg, nach einem "Wort" in einer Spalte in der Datenbank zu suchen. Ich verwende den folgenden Code ein:Suche nach einem Wort in einer bestimmten Spalte mit EF oder linq (C#)

query.Where(x => x.Content.Contains(key)); 

Das Problem ist, wenn die Spalte enthält: „Ich bin 2 Jahre alt“, wenn sie mit dem Wort „Jahr“ gesucht, so wird es nicht finden, aber das vorherige Codebeispiel findet es.

Auch, wenn ich versuche, Raum, um vor und nach dem Schlüssel wie folgt aus:

query.Where(x => x.Content.Contains(" " + key + " ")); 

Es wird den Satz nicht finden. „Jahr her, hatte ich einen Traum“,

Auch Was ist mit Kapital und Kleinbuchstaben in EF?

+0

Überprüfen Sie dies kann es Ihnen helfen => http://stackoverflow.com/questions/3843060/linq-to-entities-case-sensitive-comparison – CodeNotFound

+0

gut das ist für Groß-und Kleinschreibung. – Kasparov92

+0

Es hängt nur von der Sortierung von Ihre Tabelle oder Ihre gesamte Datenbank. Einfach das überprüfen. – CodeNotFound

Antwort

0

Hier ist eine Möglichkeit, dies zu tun und nur ganze Wörter zu finden. Stecken Sie den folgenden Code in LinqPad, um zu testen. Regex ist jedoch die Macht, die das funktioniert und Regex ist langsamer als .Contains.

void Main() 
{ 
    List<string> testStrings = new List<string>(); 
    testStrings.Add("I am 2 years old"); 
    testStrings.Add("Year ago, I had a dream."); 

    var searchValue = "year"; 
    string expression = String.Format(@"\b*((?i){0}(?-i))\b", searchValue); 

    Regex regex = new Regex(expression); 

    var found = testStrings.Where(s => regex.Matches(s).Count > 0); 

    found.Dump(); 
} 

Die Regex funktioniert wie folgt:

\b*((?i){0}(?-i))\b 

\ b bedeutet ein ganzes Wort erhalten, bedeutet Groß- und Kleinschreibung (i?).

Verwandte Themen