Невозможно применить условие Linq Where к связанному объекту в ядре Entity Framework - PullRequest
0 голосов
/ 09 марта 2019

У меня есть EventEntity, который имеет IEnumerable<Poc> PocEntity.

public class EventEntity
{
    public Guid Id { get; set; }
    public IEnumerable<PocEntity> Poc { get; set; }
}

Я пытаюсь отфильтровать EventEntity на основе PocEntity. Итак, я пытаюсь так,

IQueryable<EventEntity> query = _context.Events.Where(x => x.Poc.Where(p => p.PocId.Equals(pocId)));

Но я получаю ошибку и не могу этого достичь. Пожалуйста, помогите, как это сделать. Я использую EF Core.

Я получаю две ошибки, Ошибка 1:

Невозможно неявно преобразовать тип 'System.Collections.Generic.IEnumerable' в 'bool'

Ошибка 2:

Невозможно преобразовать лямбда-выражение в предполагаемый тип делегата, поскольку некоторые из возвращаемых типов в блоке неявно конвертируемы тип возврата делегата

Ответы [ 2 ]

2 голосов
/ 09 марта 2019

Ошибка в том, что аргумент вашего первого предложения Where () имеет неправильный тип.x => x.Poc.Where(p => p.PocId.Equals(pocId)) нужно оценивать как бул.Для этого вы можете использовать Any () вместо Where ():

IQueryable<EventEntity> query = _context.Events.Where(x => x.Poc.Any(p => p.PocId.Equals(pocId)));
1 голос
/ 09 марта 2019

Проблема с первым условием where:

.Where(x => x.Poc.Where(p => p.PocId.Equals(pocId)));

Предложение where ожидает выражение bool, в то время как единственное, что он получает, - это коллекция: p.PocId.Equals(pocId)

Решение : Просто добавьте Any() в конец коллекции следующим образом:

.Where(x => x.Poc.Where(p => p.PocId.Equals(pocId)).Any())
...