EF Linq 包含多个字符串

EF Linq Include multiple strings

所以我正在尝试使用 EF Linq 检索(一个或多个)children 一些实体。 奇怪的是这不起作用:

public static class DbSetExtension
{
    public static IQueryable<T> Include<T>(this IDbSet<T> dbSet, params string[] paths) where T : class
    {
        foreach (var path in paths)
            dbSet.Include(path: path);

        return dbSet;
    }
}

//Usage: dbSet<Company>().Include(paths: nameof(Company.Projects))

在这种情况下,每个 child 都是空的... 但是当我使用它时,它起作用了:

dbSet.Include("Projects");

有谁知道为什么?我能做些什么来解决这个问题?

Solution

public static IQueryable<T> Include<T>(this IQueryable<T> queryable, params string[] paths) where T : class
{
    foreach (var path in paths)
        queryable = queryable.Include(path: path);

    return queryable;
}

嗯,就其本身而言:

dbSet.Include(path: path);

不会改变 dbSet 的状态。

所以当你返回时,include 不是 "included"。

.Include 实际上并没有改变 dbSet 的任何内容。它 returns 一个值,不会修改调用它的对象。

foreach(var path in paths)
{
    dbSet = dbSet.Include(path: path);
}

应该可以。