2015-11-10 2 views
0

UPDATE: Вот точный код, который я использую, вместо простого примера.LINQ с определенными словами не работает

имя
query = context.GetQueryable<SearchCustomers>() // This is a huge list of customers 

if (!string.IsNullOrEmpty(company)) 
         query = query.Where(x => x.CompanyName.Contains(company)); 

Компания Майк и Джо Ремонт Магазин

Если я искать только «Майк» возвращается Майк и Джо Repair Shop, как и ожидалось. Если я ищу «Mike and Joe Repair Shop», он возвращает Null. Если я ищу «Joe Repair Shop», он возвращает ожидаемый магазин ремонта Майка и Джо.

Я предполагаю, что это связано с тем, что слово «и» находится в строке.

У меня проблема, если если слово, которое ищет запрос, содержит слово «и», оно терпит неудачу. Вот ситуация:

Нужно ли мне избегать слова «и»?

+4

Там нет LINQ здесь, 'Contains' является методом экземпляра, определенный на' класса String', и это то, что называют здесь. – MarcinJuraszek

+1

У вас есть 'var word =" Кошки и собаки ", а не' var word = "Cat and Dog" '? – dotnetom

ответ

1

Метод string.Contains() предназначен только для соответствия подстрокам строки. Таким образом, это не зарезервированное ключевое слово при использовании метода Contains(). Я попробовал два различных способа проверить ваше утверждение о and:

List<string> phrases = new List<string>() {"Cats and Dogs", "Cats and Bats", "Dogs and Trees"}; 
IEnumerable<string> f = phrases.Where<string>(x =>x.Contains("Cats and Dogs")); 
System.Console.WriteLine(f.FirstOrDefault()); 
> Cats and Dogs 

снова:

List<string> phrases = new List<string>() {"Cats and Dogs", "Cats and Bats", "Dogs and Trees"}; 
IEnumerable<string> g = from phrase in phrases where phrase.Contains("Cats and Dogs") select phrase; 
System.Console.WriteLine(g.FirstOrDefault()) 
> Cats and Dogs 

Мое предположение, что есть Юникода пространства в оригинальной CompanyName, не соответствие с Contains() против строка с белым пространством ascii.

Например:

System.Console.WriteLine("Cats and Dogs"); 
> Cats and Dogs 
System.Console.WriteLine("Cats and\u2000Dogs"); 
> Cats and Dogs 
System.Console.WriteLine("Cats and\u2000Dogs".Contains("Cats and Dogs")); 
> False 
+0

Я думаю, что вы что-то с Unicode пространства. Мне нужно будет проверить, так ли это. –

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