EF Core с Postgres не может перевести запрос Array.Contains () - PullRequest
2 голосов
/ 24 февраля 2020

У меня есть объект с полем, определенным как массив идентификаторов GUID. И я хочу знать, есть ли в БД несколько строк, в которых поле содержит значение, переданное в качестве аргумента.
В соответствии с документами Я могу сделать .Where(x => x.ArrayField.Contains(arg)) или .Where(x => x.ArrayField.Any(f => f == arg)) (также можно обернуть аргумент в массив из одного элемента и выполните .Any(f => array.Contains(f))) вызов.
Но на самом деле я получаю это:

System.InvalidOperationException: Error generated for warning 'Microsoft.EntityFrameworkCore.Query.QueryClientEvaluationWarning: The LINQ expression 'where {[x].Ids => Contains(Id_2)}' could not be translated and will be evaluated locally.'. This exception can be suppressed or logged by passing event ID 'RelationalEventId.QueryClientEvaluationWarning' to the 'ConfigureWarnings' method in 'DbContext.OnConfiguring' or 'AddDbContext'.

Мой запрос выглядит так:

var entities = await context.Query<Entity>
    .Where(x => x.Ids.Contains(Id))
    .ToArrayAsync();

Почему это неправильно? Или должна быть какая-то дополнительная конфигурация?
В столбце на стороне БД, определенном как uuid[]. Я не профессионал Postgre, но предположим, что для базы данных этого достаточно.

UPD : поле на стороне C# определено как IReadOnlyCollection<Guid>. Может ли это быть причиной сбоя переводчика?

UPD2 : изменение Ids типов на Guid[] или IEnumerable<Guid> не помогло. Та же ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...