无法将 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)));
我有一个 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)));