2016-04-02 15 views
0

Veritabanındaki bir sütunda "sözcük" araması yapmanın en iyi yolu nedir? Ben şu kodu kullanın:EF veya linq (C#) kullanarak belirli bir sütunda sözcük arama

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

sütun içeriyorsa konudur: kelime "yıl" ile ararken, onu bulmak olmayacaktır ama önceki kod örneği bulur "Ben 2 yıl yaşlandım" o.

Ayrıca, daha önce de ve bunun gibi anahtar sonra boşluk eklemek denerseniz:

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

Bu cümle "Yıl önce, bir rüya gördüm" bulamazlar, Ayrıca

, EF'de sermaye ve küçük harf durumu.

+0

Bunu kontrol etmenize yardımcı olabilir => http://stackoverflow.com/questions/3843060/linq-to-entities-case-sensitive-comparison – CodeNotFound

+0

davanın büyük/küçük harfe duyarlı olması için bu 0 ... – Kasparov92

+0

masanız veya tüm veritabanınız. Sadece chekc. – CodeNotFound

cevap

0

Bunu yapmanın ve yalnızca tüm kelimeleri bulmanın bir yolu. Test etmek için aşağıdaki kodu LinqPad'e takın. Ancak, Regex bu işi yapan güçtür ve Regex daha yavaştır. aşağıdaki gibi

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(); 
} 

Regex çalışır: b \

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

, bütün bir kelime olsun demektir harf duyarsız demektir (i?).

İlgili konular