如何在循环中链接多个 DbSet.Include()?

Ras*_*kov 2 c# entity-framework-6

如何包含在循环中?我想指定要包含在查询中的相关对象。

我有下一个功能

    public IQueryable<TEntity> Include(Expression<Func<TEntity, object>>[] includes)
    {
        IQueryable<TEntity> result = null;

        //two includes are ok:
        //IQueryable<TEntity> result2 = null;
        //if (includes.Count() > 1)
        //{
            //result2 = dbset.Include(includes[0]).Include(includes[1]);
        //}

        //include in loop is not ok:
        foreach (var exp in includes)
        {
            result = dbset.Include(exp);
        }
        return result;
    }
Run Code Online (Sandbox Code Playgroud)

如果我取消注释注释代码,那么 result2 就可以了。但结果并不好。

奇怪的是,如果我一步一步地调试循环,在每次迭代中检查结果然后结果就可以了。但是,如果我没有一步一步地检查结果,其中包括仅用于最后一次表达的工作。

您知道为什么这不起作用以及如何解决吗?


编辑:这是修复:

    result = dbset;
    foreach (var exp in includes)
    {
        result = result.Include(exp);
    }
Run Code Online (Sandbox Code Playgroud)

hai*_*770 6

问题是,你保持覆盖的值result与单一的结果Include()上的呼叫dbSet

您需要按如下方式连接这些调用:

foreach (var exp in includes)
{
    result = result.Include(exp);
}
Run Code Online (Sandbox Code Playgroud)