c# - EF Linq 包含多个字符串

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

在这种情况下,每个 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;
}

最佳答案

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

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

应该可以。

关于c# - EF Linq 包含多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51783257/

相关文章:

c# - Linq DataContext SubmitChanges InvalidOperationException from ZombieCheck

c# - 如何为 EF 6、Oracle DB、 Controller 脚手架调试和修复 'Exception has been thrown by the target of an invocation'

asp.net - Entity Framework ObjectContext 重用

c# - 无法使用已使用的键(LINQ)添加实体

c# - 如何从 Asp.Net Core View 组件返回错误的 HTTP 状态代码

c# - 在运行时将实体映射更改为另一个 "unknown"表

c# - 如何在C#中找到最长的颜色序列

c# - Sharepoint 2010 更新的远程通知?

c# - 从 "Code First From Database"EF6 更改生成的类

c# - 如何强制对同名的派生类型进行 XML 反序列化?