EF Linq包含多个字符串

时间:2018-08-10 09:26:01

标签: c# entity-framework linq include

因此,我尝试使用EF Linq检索(一个或多个)某些实体的子代。 奇怪的是,这不起作用:

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))

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

dbSet.Include("Projects");

有人知道为什么吗?我该怎么做才能解决这个问题?

  

解决方案

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;
}

2 个答案:

答案 0 :(得分:3)

.Include实际上对dbSet并没有任何改变。它返回一个值,而不修改其调用的对象。

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

应该工作。

答案 1 :(得分:1)

这本身就是这样:

dbSet.Include(path: path);

不会更改dbSet的状态。

因此,当您返回时,包含不会被“包含”。