0

我正在使用EF-6處理asp.net mvc5 web應用程序。我試圖動態傳遞.INCLUDE &。選擇如下: -如何動態傳遞.Include&。選擇

  var query = context.SecurityRoles.AsQueryable(); 
      foreach (var include in includeProperties.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) 
      { 
       query = query.Include(include); 
      } 
      return await query 
       .SingleOrDefaultAsync(a2 => a2.SecurityRoleID == id); 
     } 

我將調用如下: -

var securityrole = await uniteofwork.SecurityRoleRepository 
       .FindSecurityRole(id.Value, "SecurityRoleModulePermissions.Select(a2=>a2.Module),SecurityRoleModulePermissions.Select(a2=>a2.PermissionLevel)),Staffs"); 

但我得到以下異常: -

指定的包含路徑無效。該的EntityType 「SkillManagementModel.SecurityRoleModulePermission」不具有名稱聲明 導航屬性「選擇(A2 => A2」

+0

你可以不要在這樣的字符串中傳遞代碼 – SLaks 2015-02-08 02:29:09

+0

@SLaks所以我怎麼能做到這一點? – 2015-02-08 02:29:55

+0

''SecurityRoleModulePermissions.Module,SecurityRoleModulePermissions.PermissionLevel,Staffs'' – 2015-02-08 08:28:53

回答

1

可以動態包括您的導航性能是這樣的:

public async Task<SecurityRole> FindSecurityRole(Expression<Func<SecurityRole, bool>> predicate, params Expression<Func<SecurityRole, object>>[] includeProperties) 
{ 
    var query = context.SecurityRoles.AsQueryable(); 
    if (includeProperties != null) 
     query = includeProperties.Aggregate(query, (current, include) => current.Include(include)); 

    return await query.SingleOrDefaultAsync(predicate); 
} 

var securityrole = await uniteofwork.SecurityRoleRepository.FindSecurityRole 
    (sr => sr.Id == id.Value, sr => sr.Module, sr =>sr.PermissionLevel) 
+0

thanks工作100% – 2015-02-08 23:00:03