C# EF Linq包含多个字符串

C# EF Linq包含多个字符串,c#,entity-framework,linq,include,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)

因此,我尝试使用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))
有人知道为什么吗?我能做些什么来解决这个问题

解决方案

公共静态IQueryable包含(此IQueryable可查询,参数字符串[]路径),其中T:class
{
foreach(路径中的变量路径)
queryable=queryable.Include(路径:path);
返回可查询;
}
好吧,这本身就是:

dbSet.Include(path: path);
不会改变数据库集的状态

因此,当您返回时,include不是“include”。

那么,就其本身而言,这是:

dbSet.Include(path: path);
不会改变数据库集的状态


因此,当您返回时,include不是“include”。

。include
实际上不会更改有关
dbSet
的任何内容。它返回一个值,而不是修改调用它的对象

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

应该有效。

。Include
实际上不会改变
dbSet
的任何内容。它返回一个值,而不是修改调用它的对象

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

应该有效。

也许dbSet=dbSet。包括(“项目”);你能工作吗?因为您返回一个DbSetmaybe dbSet=dbSet.Include(“Projects”);你能工作吗?因为您返回了一个DbSetNote,要使其运行时不会出错,
dbSet
应该是
IQueryable
IDbSet
extends
IQueryable
。在IQueryable上找到了不错的结果,并提供了解决方案。IDbSet扩展了IQueryable。因此,
IDbSet
IQueryable
更具体,并且不能将
Include
的结果分配给它,即
IQueryable
。请注意,要使其运行无误,
dbSet
应该是
IQueryable
IDbSet
扩展了
IQueryable
。在IQueryable上找到了不错的结果,并提供了解决方案。IDbSet扩展了IQueryable。因此,
IDbSet
IQueryable
更具体,并且不能将
Include
的结果分配给它。