Выражение «Включить путь» должно ссылаться на определенное свойство навигации - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь создать общее включение, но я получаю эту ошибку.Что случилось?Спасибо.

Выражение «Включить путь» должно ссылаться на свойство навигации, определенное для типа.Используйте точечные пути для ссылочных навигационных свойств и оператор Select для коллекционных навигационных свойств.

_repository.FindWithIncludes(..., new List<...>
    {
        x => x.Property1,
        x => x.Property2,
    });   

 public ICollection<TEntity> FindWithIncludes(Expression<Func<TEntity, bool>> currentExpression, List<Expression<Func<TEntity, object>>> propertiesToInclude)
    {
        using (var customContext = new TContext())
        {
            return customContext.Set<TEntity>().Include(x => propertiesToInclude.Select(currentProperty => currentProperty)).Where(currentExpression).ToList();
        }
    }

1 Ответ

0 голосов
/ 20 декабря 2018

Include нельзя использовать таким образом:

.Include(x => propertiesToInclude.Select(currentProperty => currentProperty)

Вам нужен эквивалент вызова Include для каждого выражения списка:

.Include(x => x.Property1)
.Include(x => x.Property2)
...
.Include(x => x.PropertyN)

, который можетбыть достигнуто с помощью кода, подобного следующему:

var query = customContext.Set<TEntity>().AsQueryable();
foreach (var property in propertiesToInclude)
    query = query.Include(property); 
return query.Where(currentExpression).ToList();

или с помощью метода Aggregate:

return propertiesToInclude
    .Aggregate(customContext.Set<TEntity>().AsQueryable(), (q, p) => q.Include(p))
    .Where(currentExpression).ToList();
...