2016-03-20 4 views
1

У меня есть и проблема с запросом sql linq, который у меня есть. У меня есть запрос, что при вводе имени человека во входном текстовом поле мне нужно показать список лиц, которые содержат это имя, но проблема, которую я испытываю, следующая: имя человека может выглядеть так jose ou josé. Это одно и то же имя, но одно с é a другое без é. Мой запросSql Linq поисковый запрос

var person = (from p in context.Person 
       where p.Name.Contains(personName) || p.Name.StartsWith(personName) || p.Name.EndsWith(personName)        
          select p).OrderBy(m => m.Name).ToPagedList(page, 10); 
    return person; 

Идея заключается в том, чтобы, когда я райт хосе запрос получить все люди, которые имеют Хозе и Хозе, и наоборот. Если я буду раздражать, запрос возвращает людей, у которых есть jose, и не allsow возвращать людей, у которых есть josé с é. Кто-нибудь знает, как я могу решить эту проблему. Спасибо

+0

Btw, 'p.Name.Contains (personName)' обрабатывает 'StartsWith' и' EndsWidth', поэтому их не нужно. Что касается вашего основного вопроса, с точки зрения базы данных имена в примере разные. –

+0

Здравствуйте, Это имя одно и то же, но у другого нет другого. Я должен вернуть имя, которое имеет или не имеет. Спасибо –

ответ

0

Вы можете использовать String.Compare, использование в современной культуре будет выглядеть следующим образом (если вы не хотите использовать текущую культуру, то вы могли бы просто использовать InvariantCulture вместо этого):

if (String.Compare("Jose", "José", CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace) == 0) 
{ 
    // both strings are equal 
} 

Вы бы осуществить эту проверку непосредственно в Linq запрос, как это:

var person = (from p in context.Person 
       where String.Compare(p.Name, personName, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace) == 0       
          select p).OrderBy(m => m.Name).ToPagedList(page, 10); 
return person; 

Это все очень хорошо объяснено в this answer.

+0

Здравствуйте, я попробовал ваш запрос, но он не возвращает notyhing. –

+0

Попробуйте отладить запрос и посмотрите, что на самом деле происходит, я не могу помочь вам без какого-либо контекста. – Peroxy

+0

Это переводит к простому WHERE [t0]. [Name] = @ p0 с linq2sql, эффективно игнорируя все опции Compare. –

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