为什么一个查询 return 个相关实体,而另一个不查询?

Why does one query return related entities, but not the other?

我目前正在将现有存储库迁移到通用存储库。

从数据库中检索所有 MyEntity 列表的现有方法如下所示:

public IList<MyEntity> GetAll()
{
    var list = _context.MyEntity.Include(_ => _.OtherEntity).ToList();
    return list;
}

此方法将 return 列出所有 MyEntity,并加载它们的相关 OtherEntite。 我已将存储库简化为通用存储库,其方法如下所示:

public IList<TEntity> GetAll(params Expression<Func<TEntity, object>>[] expressions)
        {
            var entity = _context.Set<TEntity>();
            foreach (var expression in expressions)
            {
                entity.Include(expression);
            }
            var list = entity.ToList();
            return list;
        }

我会这样调用方法: var myEntityList = _repository.GetAll(_ => _.OtherEntity);

然而,这似乎没有加载相关的 OtherEntites。对于可能需要或不需要加载相关实体的场景,我必须包含表达式参数。

有人可以解释我哪里出错了以及为什么我的相关实体无法加载到新设置中吗?谢谢

看起来第一个方法 return 是 .Include() 的结果,而第二个方法只是调用该方法,但忽略了结果。 LINQ 方法通常 return 一个新集合而不是修改现有集合。

试试这个:

public IList<TEntity> GetAll(params Expression<Func<TEntity, object>>[] expressions)
{
    IQueryable<TEntity> entity = _context.Set<TEntity>();
    foreach (var expression in expressions)
    {
        entity = entity.Include(expression);
    }
    var list = entity.ToList();
    return list;
}