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

时间:2016-02-05 07:27:11

标签: 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;
    }

如果我取消注释注释代码,result2就可以了。但结果还不错。

奇怪的是,如果我逐步调试循环,在每次迭代检查结果中,结果都可以。但是,如果我没有逐步检查结果,包括上次表达的工作。

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

编辑: 这是修复:

    result = dbset;
    foreach (var exp in includes)
    {
        result = result.Include(exp);
    }

1 个答案:

答案 0 :(得分:4)

问题在于,您在result上通过单Include()次调用的结果来覆盖dbSet的值。

您需要连接这些调用,如下所示:

foreach (var exp in includes)
{
    result = result.Include(exp);
}