EF Core выборка данных

Есть обработчик:

[HttpGet]
[Route("/ingredients/get")]
public IActionResult Get([FromQuery(Name = "startswith")] string startswith = "",
            [FromQuery(Name = "limit")] int limit = 10,
            [FromQuery(Name = "offset")] int offset = 0)
{
    var request = _db.Ingredients.AsQueryable<Ingredient>();
    if (!string.IsNullOrEmpty(startswith))
        request = request.Where(x => x.Name.ToLower().StartsWith(startswith.ToLower()));
            
    request = request.Skip(offset);
    request = request.Take(limit);

    return new OkObjectResult(JsonConvert.SerializeObject(request.ToList()));

}

При отсутствии параметров выборки - все работает. Limit и Offset тоже работают.
Однако, если указывать startswith, то что-то идет не так и вываливается пустой ответ при валидном значении startswith.

Пример:

GET /ingredients/get

[{"Uid":"deee1533-59a8-4b3f-a8fc-19dadd3d4ce7","Name":"Баклажан"},{"Uid":"24e3ae0e-f302-42ed-96d4-d042c7c7bed9","Name":"Яйцо куриное"},{"Uid":"79087d7c-d080-440c-978f-cb17d822794c","Name":"Ветчина"}}]
GET /ingredients/get?startswith=бак

[]

хотя должен был найти баклажан.

Бд: sqlite3

Сгенерированный запрос:

SELECT "i"."uid", "i"."name"
FROM "ingredients" AS "i"
WHERE (@__ToLower_0 = '') OR ("i"."name" IS NOT NULL AND (((lower("i"."name") LIKE @__ToLower_0 || '%') AND (substr(lower("i"."name"), 1, length(@__ToLower_0)) = @__ToLower_0)) OR (@__ToLower_0 = '')))

При этом, если подставить под переменные из сгенеренного запроса значения и выполнить в CLI, то все работает:

введите сюда описание изображения

  • примечание: только с латинскими значениями.

При тестах с кириллицей возникает всё тоже самое:
введите сюда описание изображения

То-есть, сгенерированный запрос на латинице работает, но не в EF Core. При этом, кириллический не работает в обоих случаях.

Подскажите что делать, пожалуйста ^^


Ответы (0 шт):