Как я могу использовать обратную функцию postgresql с EFCore

#postgresql #entity-framework-core #npgsql

#postgresql #entity-framework-core #npgsql

Вопрос:

Я хочу создать SQL-запрос с EFCore, как показано ниже.

 FROM "Customers" AS c
            where reverse("Phone") LIKE reverse('%#####');
      ORDER BY 1
      LIMIT @__p_2 OFFSET @__p_1
  

Я пытаюсь использовать LINQ, но этот код не работает, а также я не смог найти обратный метод внутри EF.Functions

 query = query.Where(c => c.Phone.Reverse().ToString() == $"{phone}%");
  

выдает ошибку

Сообщение»: «Выражение LINQ ‘DbSet r n .Где(c => c.Phone r n .Reverse().Не удалось перевести toString() == __Format_0)’. Либо перепишите запрос в форме, которая может быть переведена, либо переключитесь на оценку клиента явно, вставив вызов AsEnumerable(), AsAsyncEnumerable(), ToList() или ToListAsync(). Смотрите https://go.microsoft.com/fwlink/?linkid=2101038 для получения дополнительной информации.

Есть ли какой-либо способ создать запрос обратной функции с помощью поставщика PostgreSQL / Npgsql для ядра Entity Framework.

Ответ №1:

К сожалению, нет простого/идиоматический способ выразить реверсирование строки .Продажи; обратите внимание, что c.Phone.Reverse().ToString() ничего не вернуть вспять телефон, так как он вызывает toString на IEnumerable, возвращаемого от обратного.

Я добавил EF.Функции.Обратная для предстоящей версии 5.0 — см.https://github.com/npgsql/efcore.pg/pull/1496.