Ricevo un errore "Codice che si suppone non sia raggiungibile" quando si esegue la seguente istruzione da Linq a Sql. Sto usando EF 6.1.3. Penso che questo sia un bug noto relativo al filtraggio di una proprietà di navigazione. Sembra che potrebbe essere corretto in EF7 ma non vedo nulla di simile a questo nelle note di rilascio di EF 6.2 né sugli elementi aperti di EF6 su GitHub, quindi suppongo che sto cercando un lavoro, forse un modo diverso di scrivere la mia dichiarazione di Linq.
In definitiva, sto applicando la stessa clausola where (AccountSecurity) in più punti (anche in base al passaggio di un parametro chiave utente), quindi ho pensato che sarei riuscito a trasformarlo in una funzione che genera l'espressione da utilizzare nella clausola where in la mia affermazione da Linq a 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));
}
Come soluzione alternativa, è possibile acquisire la chiamata del metodo in variabile all'esterno dell'albero delle espressioni della query e utilizzare tale variabile all'interno di:
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();