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