EFCore 3: Как сравнивать строковые столбцы на стороне сервера - PullRequest
0 голосов
/ 21 апреля 2020

Я хочу эффективно получить результаты этого запроса.

// Получить всех людей, чье имя начинается с F или более поздних алфавитов

Выбрать * из MyTable, где PersonName> 'F'

Когда я запускаю этот код с помощью Entity Framework Core 3.0,

                 context.MyTable 
                 .Where(t=>  String.Compare(t.PersonName ,"F")>0);

Я получил ошибку,

запрос не может быть переведен. Либо переписать запрос в форме, которую можно перевести, либо явно переключиться на оценку клиента, вставив вызов либо AsEnumerable (), AsAsyncEnumerable (), ToList (), либо ToListAsyn c ()

Моя текущая работа - использовать метод From SQL и написать собственный sql. Есть ли способ добиться того же, используя синтаксис LINQ?

1 Ответ

1 голос
/ 21 апреля 2020

От Microsoft до c Where

Запрос, представленный этим методом, не выполняется до тех пор, пока объект не будет перечислен путем непосредственного вызова его метода GetEnumerator

Вы должны вызывать метод ToList () или ToListAsyn c () после Где для принудительной немедленной оценки запроса

В вашем коде

context.MyTable
             .TakeWhile(t => t.PersonName.First() > 'F')
             .ToList(); 

Лучшее решение для

Получить всех людей, чьи имена начинаются с F или более поздних букв

    context.MyTable
             .OrderBy(t => t.PersonName)
             .SkipWhile(t => t.PersonName.First() < 'F')
             .ToList();

Позаботьтесь с прописными и строчными буквами

...