Como passar lambda 'include' com vários níveis no Entity Framework Core?
Eu tenho um repositório que obtém uma expressão lambda para 'include'.
public TEntity FirstOrDefault(Expression<Func<TEntity, bool>> predicate, params Expression<Func<TEntity, object>>[] includePaths)
{
return Context.Set<TEntity>().Includes(includePaths).FirstOrDefault(predicate);
}
Nas versões anteriores do EF, eu o usava em camadas de serviços como:
var plan = _unitOfWork.PlanRepository
.FirstOrDefault(
p => p.Id == id,
include => include.PlanSolutions.Select(ps => ps.Solution)
);
Onde 'PlanSolutions' é uma coleção e 'Solution' é uma propriedade aninhada em 'PlanSolution'.
Mas agora esse código recebe um erro:
InvalidOperationException: a expressão de propriedade 'include => {de PlanSolutions ps em [include] .PlanSolutions, selecione [ps] .Solution}' não é válida. A expressão deve representar um acesso à propriedade: 't => t.MyProperty'. Para obter mais informações sobre como incluir dados relacionados, consultehttp://go.microsoft.com/fwlink/?LinkID=746393.
Agora parece que não posso usar o método 'Select' para obter vários níveis, mas também não posso usar o método 'ThenInclude' sugerido pela Microsoft, porque a consulta está localizada dentro do repositório onde o serviço não possui um acesso a. Existe alguma maneira de curá-lo?