Поисковый запрос Sql Linq

У меня есть и проблема с запросом 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;

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


person Chico José    schedule 20.03.2016    source источник
comment
Кстати, p.Name.Contains(personName) обрабатывает StartsWith и EndsWidth, поэтому они не нужны. Как насчет вашего основного вопроса, с точки зрения базы данных имена в примере разные.   -  person Ivan Stoev    schedule 20.03.2016
comment
Здравствуйте, имена одинаковые, но у одного есть é, а у другого нет. Я должен вернуть имя, которое имеет é или не имеет é. Благодарить   -  person Chico José    schedule 20.03.2016


Ответы (1)


Вы можете использовать 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;

Все это очень хорошо объяснено в этом ответе.

person Peroxy    schedule 20.03.2016
comment
Здравствуйте, я пробовал ваш запрос, но он ничего не возвращает. - person Chico José; 20.03.2016
comment
Попробуйте отладить запрос и посмотрите, что на самом деле происходит, я не могу вам помочь без какого-либо контекста. - person Peroxy; 20.03.2016
comment
Он преобразуется в простое WHERE [t0].[Name] = @p0 с linq2sql, эффективно игнорируя все параметры Compare. - person Antonín Lejsek; 20.03.2016