繁体   English   中英

System.Core错误:使用C#Entity Framework和带有表达式的Linq,“代码应该无法访问”

[英]System.Core error: “Code supposed to be unreachable” using C# Entity Framework and Linq with Expression

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

最终,我在多个地方(同样基于传递用户键参数)应用了相同的where子句(AccountSecurity),因此我认为我可以将其转换为生成在Expression中的where子句中使用的Expression的函数。我的Linq to Sql语句。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM