2011-01-05 3 views
0

При поиске слова в поле поиска мне будет разрешено найти слово, например «cookie», набрав «Coo» или «oOk». какой синтаксис LinQ мне нужен для создания этой функции?Какой синтаксис LinQ?

Кроме того, функциональность должна учитывать нечувствительность к регистру, например, слово «ComPuTER» должно быть найдено, набрав слово «MpUT»?

+2

Человек .... вы должны отметить несколько своих ответов в качестве ответов, по крайней мере некоторые из них, должно быть, были полезны. – R0MANARMY

ответ

1

Вы можете использовать contains:

var query = from t in tbl 
      where t.ToUpper().Contains(input.ToUpper()) 
      select t; 

Я использовал ToUpper, чтобы убедиться, что таблица и источник тот же случай, так что "Coo" будет соответствовать " печенье»

Там также как и метод SQLMethods, но я не использовал это ...

var query = from t in tbl 
      where SqlMethods.Like(t, "%"+input+"%") 
      select t; 

(Подробнее здесь: http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/10/16/linq-to-sql-like-operator.aspx)

+0

Обратите внимание, что для чего-либо, кроме тривиальных чисел элементов в tbl, это становится глупо неэффективным, очень быстро. Если вы ищете много вещей, используйте правильный инструмент для задания (а linq-to-objects - не он). – Mark

+0

Хороший вызов 'SqlMethods' думал, что он немного похож на утечку SQL через уровни абстракции. Вам также может не потребоваться вызов «ToUpper», если SQL-сервер не настроен на чувствительность к регистру. – R0MANARMY

+0

Спасибо за помощь! –

0

что-то вроде:

var cookies = (from t in tbl where t.Contains("oOK") select t); 
+0

Спасибо за помощь! –

0

Вот один из способов, используя свои ценности. Попробуйте в LinqPad. На самом деле, я не использую ни одну из возможностей Linq, и вы захотите посмотреть его на очень большие источники.

string[] words1 = {"cookies", "lasagna", "steak"}; 

string searchTerm1 = "Coo"; 
var matches1 = words1.Where (w => w.ToLowerInvariant().Contains(searchTerm1.ToLowerInvariant())); 
Console.WriteLine(matches1.Count().ToString()); 

string searchTerm2 = "oOk"; 
var matches2 = words1.Where (w => w.ToLowerInvariant().Contains(searchTerm2.ToLowerInvariant())); 
Console.WriteLine(matches2.Count().ToString()); 

List<string> words2 = new List<string>(); 
words2.AddRange(new string[] {"abacus", "ComPuTER", "coffee maker"}); 

string searchTerm3 = "MpUT"; 
var matches3 = words2.Where (w => w.ToLowerInvariant().Contains(searchTerm3.ToLowerInvariant())); 
Console.WriteLine(matches3.Count().ToString()); 
+0

Спасибо за помощь! –

Смежные вопросы