无法将 Linq Where 子句应用于 Entity Framework 核心中的链接实体

Unable to Apply Linq Where Clause to Linked Entity in Entity Framework Core

我有一个 EventEntity,其中有 IEnumerable<Poc> PocEntity

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

我正在尝试根据 PocEntity 过滤 EventEntity。所以我正在尝试这样,

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

但是我遇到了错误,无法实现。请协助如何做到这一点。我正在使用 EF Core。

我遇到了两个错误, 错误 1:

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'bool'

错误 2:

Cannot convert lambda expression to intended delegate type because some of the return types in the block are not implicitly convertible to the delegate return type

问题在于第一个 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())

错误是因为第一个 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)));