c# - 系统核心错误 : "Code supposed to be unreachable" using C# Entity Framework and Linq with Expression

标签 c# entity-framework entity-framework-6 linq-to-entities linq-expressions

在执行以下 Linq to Sql 语句时出现“代码应该无法访问”错误。我正在使用 EF 6.1.3。我认为这是一个与过滤导航属性相关的已知错误。似乎它可能已在 EF7 中修复,但我在 EF 6.2 发行说明和 GitHub 上的 EF6 开放项目中都没有看到与此相关的任何内容,所以我想我正在寻找解决方法,也许是一种不同的写作方式我的 Linq 声明。

最终,我在多个地方应用相同的 where 子句 (AccountSecurity)(也是基于传递用户 key 参数)所以我想我可以将它变成一个函数,生成表达式以在我的 Linq to Sql 语句中的 where 子句。

    public List<Company> GetCompanyList(int p_UserKey, MemberType p_MemberType)
    {
        var qry = from cs in this.DbContext.CompanySet
                  .Where(c => c.Accounts.AsQueryable().Any(this.AccountSecurity(p_UserKey)))
                  select cs;
        return qry.ToList();
    }

    private Expression<Func<Account, bool>> AccountSecurity(int p_UserKey)
    {
        return (ac => ac.UserAccounts.Any(ua => ua.UserKey == p_UserKey));
    }

最佳答案

作为解决方法,您可以将方法调用捕获到查询表达式树外部的变量中,并在内部使用该变量:

var accountFilter = this.AccountSecurity(p_UserKey);
var qry = from cs in this.DbContext.CompanySet
          .Where(c => c.Accounts.AsQueryable().Any(accountFilter))
          select cs;
return qry.ToList();

关于c# - 系统核心错误 : "Code supposed to be unreachable" using C# Entity Framework and Linq with Expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47062098/

相关文章:

c# - Entity Framework 枚举和字符串关联

c# - 从数据库中检索用户并转换为用户对象

c# - 使用作为另一个列表的属性过滤对象列表。使用 linq

c# - 有没有一种简单的方法可以使 EntityFramework 使用 SQL 默认值?

c# - 应用程序变量总是引用我的对象,我希望它保持 "copy"

c# - 实体模型 .net 从 MySQL 性能问题中查询 100 万条记录

entity-framework - "Error getting value from ' MyEntity ' on ' System.Data.Entity.DynamicProxies...”

c# - Entity Framework 多对多关系表创建 "backwards"

c# - 如何使用 EntityFramework 6.2 将 DbFunctions/SqlFunctions 调用提取到可重复使用的扩展/方法中?

c# - 我无法在另一台电脑上运行我的应用程序