Проблема с LINQ to Entities и String.StartsWith

Я пытаюсь создать страницу поиска с помощью LINQ to Entities, но следующий код дает мне ошибку времени выполнения о l.t.e. не распознает 'Boolean StartsWith(). Код компилируется просто отлично. Как я могу обойти это лучше, чем отправлять фильтрацию StartsWith в хранимую процедуру?

    return from dp in dents.DirectoryPersonEntrySet
           where
               ((dp.LastName.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) ||
                (dp.Department.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) ||
                dp.Extension.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase))
           select dp;

person ProfK    schedule 13.06.2009    source источник
comment
Не могли бы вы опубликовать «следующий код»? Или в теме полный код? Вы имеете в виду String.StartsWith вместо Boolean.StartsWith?   -  person Rutger Nijlunsing    schedule 13.06.2009
comment
@Rutger, спасибо, я слишком быстро нажал «Отправить» и забыл код. Я также исправил подпись.   -  person ProfK    schedule 13.06.2009
comment
Там по крайней мере 6 лишних скобок, и нам все еще не хватает прототипа функции и определения класса...   -  person em70    schedule 13.06.2009
comment
Попробуйте использовать перегрузку StartsWith без StringComparison.CurrentCultureIgnoreCase.   -  person Rinat Abdullin    schedule 13.06.2009
comment
Я не использовал LINQ to Entities, поэтому не знаю, поддерживает ли он подстановочные знаки, но нельзя ли использовать как плюс подстановочный знак?   -  person flipdoubt    schedule 13.06.2009
comment
@emaster: Какой прототип функции или определение класса вы бы хотели? Все, что имеет отношение к моему вопросу, присутствует, и лишние скобки не имеют отношения к проблеме.   -  person ProfK    schedule 15.06.2009
comment
Связанные сообщения - LINQ to Entities не распознает метод и Реализация шаблона спецификации Entity Framework   -  person RBT    schedule 01.03.2019


Ответы (1)


Я предполагаю, что EF не поддерживает перегрузку StartsWith, которая принимает параметр StringComparison.

Он должен поддерживать StartsWith, EndsWith и Contains, поэтому, возможно, вы можете попробовать:

dp.LastName.StartsWith(searchTerm)

or:

dp.LastName.ToLower().StartsWith(searchTerm)

а затем убедитесь, что searchTerm тоже в нижнем регистре.

person BengtBe    schedule 13.06.2009
comment
Угадал правильно, но учтите, что при переводе в SQL регистр не учитывается. - person marsze; 31.03.2016
comment
МОЖЕТ быть (вероятно) нечувствительным к регистру. Это зависит от настроек сортировки базы данных - person Roger Willcocks; 30.06.2016
comment
Он переводит его в оператор LIKE с «моей строкой%», «% моей строкой» и «% моей строкой%» соответственно, который автоматически нечувствителен к регистру и не может указать, что он будет чувствителен к регистру через этот вызов. - person James Gray; 09.01.2017
comment
спасатель жизни. Я потратил час на его изучение и не заметил, что использовал метод перегрузки. +1 - person Adeel Shekhani; 28.10.2018