1

次のLinq to Sqlステートメントを実行すると、「コードが到達できないと思われる」というエラーが発生します。私はEF 6.1.3を使用しています。私はこれがナビゲーションプロパティをフィルタリングすることに関連する既知のバグだと思う。 EF7では修正されているようですが、EF 6.2のリリースノートやGitHubのEF6のオープンアイテムではこれと関連するものは見当たらないので、私は別の方法で作業したいと思っています私のLinqステートメント。System.Coreエラー:C#Entity FrameworkとLinqを式で使用している「コードに到達できませんでした」

最終的には、複数の場所で同じ場所の句(AccountSecurity)を適用しています(ユーザーキーパラメータを渡すことにも基づいています)。これを使用して式を生成する関数に変換できます私のLinqから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)); 
    } 

答えて

1

、クエリ式ツリーの外に変数にメソッド呼び出しをキャプチャし、内部でその変数を使用することができます。これは私の問題が解決しない

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

。同じエラー。寄付いただきありがとうございます。 – SteveB

関連する問題