EfCore ToListAsync () Бросить исключение с условием где - PullRequest
0 голосов
/ 23 мая 2018

У меня проблема с асинхронной задачей, которая получает элементы из базы данных с определенным условием. Когда я вызываю ToListAsync (), я получаю эту ошибку

Выражение типа 'System.Collections.Generic.IAsyncEnumerable 1[System.Guid]' cannot be used for constructor parameter of type 'System.Collections.Generic.IEnumerable 1 [System.Guid] 'Имя параметра: arguments [0]

Это фрагмент кода:

public async Task<IEnumerable<Parent>> GetItems(List<Guid> TypeIds)
{
    var items = context.Parent.Include(x => x.Child).Where(x => new HashSet<Guid>(x.Child.Select(y => y.TypeId).Distinct()).SetEquals(new HashSet<Guid>(TypeIds)));
    return await items.Include(x=> x.Child).ToListAsync();
}

Если я реализую этот метод, а не async Я не получу ошибку, и все работает.

1 Ответ

0 голосов
/ 23 мая 2018

У вас не может быть Where лямбда, подобного этому для Entity Framework, помните, что выражение будет преобразовано в SQL, который понятия не имеет, что такое HashSet.Вы, вероятно, ищете что-то вроде этого:

var items = context.Parent
    .Include(x => x.Child)
    .Where(x => x.Child.Any(y => TypeIds.Contains(y.TypeId)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...