C# 如何编写包含所有导航属性的通用实体getter方法?

C# 如何编写包含所有导航属性的通用实体getter方法?,c#,entity-framework-core,C#,Entity Framework Core,我编写了一个通用的repo方法,包括以下所有导航属性: public async Task<IEnumerable<T>> GetAllWhereAsync(Expression<Func<T, bool>> expression, bool include = false) { if (include) foreach (var name in _db.Model.FindEntityTyp

我编写了一个通用的repo方法,包括以下所有导航属性:

    public async Task<IEnumerable<T>> GetAllWhereAsync(Expression<Func<T, bool>> expression, bool include = false)
    {
        if (include)
            foreach (var name in _db.Model.FindEntityType(typeof(T)).GetNavigations().Select(e => e.Name))
                _db.Set<T>().Include(name).Load();

        return await _db.Set<T>().AsNoTracking().Where(expression).ToListAsync();
    }
public异步任务getAllwheresync(表达式,bool include=false)
{
如果(包括)
foreach(在_db.Model.FindEntityType(typeof(T)).GetNavigations()中的变量名。选择(e=>e.name))
_db.Set().Include(name.Load();
return await_db.Set().AsNoTracking().Where(expression.toListSync();
}

但是,当我调用此方法时,生成的实体没有包含其导航属性。我该怎么办?

看看这个修改是否可以编译,我现在不在编译器附近,所以不能确定

public async Task<IEnumerable<T>> GetAllWhereAsync(Expression<Func<T, bool>> expression, bool include = false)
{
    var query = _db.Set<T>();
    if (include)
        foreach (var name in _db.Model.FindEntityType(typeof(T)).GetNavigations().Select(e => e.Name))
            query = query.Include(name);

    return await query.AsNoTracking().Where(expression).ToListAsync();
}
public异步任务getAllwheresync(表达式,bool include=false)
{
var query=_db.Set();
如果(包括)
foreach(在_db.Model.FindEntityType(typeof(T)).GetNavigations()中的变量名。选择(e=>e.name))
query=query.Include(名称);
return wait query.AsNoTracking().Where(expression.toListSync();
}

Include()
调用需要链接在一起,并且在
返回中使用相同的
IQueryable
。LINQ通常是不可变的,甚至从似乎修改查询的内容返回新的查询对象。这里的查询实际上是一个数据库集,因此我无法将类型“System.LINQ.IQueryable”隐式转换为“Microsoft.EntityFrameworkCore.DbSet”Edit:var query=\u db.Set().AsQueryable();作品谢谢