我首先使用EF和代码。我创建了一个User对象,其中包含对象Role的列表。每个Role对象都包含Form类型的对象。我想获得特定用户的所有角色,包括“表单”对象。
为了更好地理解:用户1< - > n角色1< - > 1表格
我尝试过类似的东西:
DBContext.Users.Include(u => u.Roles.AsQueryable().Include(i=>i.Form)).ToList().Where(r => r.Username.Equals(id)).FirstOrDefault<User>();
这导致:
Include路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。参数名称:路径
User user = DBContext.Users.Include(u => u.Roles.AsQueryable().Include(i=>i.Form)).ToList().Where(r => r.Username.Equals(id)).FirstOrDefault<User>();
List<Role> roles = user.Roles.AsQueryable().Include(r=>r.Form).ToList();
这不会抛出任何异常,但Form对象不包含在Role对象中。
如何在包含的对象上使用include?有没有办法在linq表达式完成后包含“对象”? 谢谢你的问候
[编辑]为了更好地理解我的模型的外观
public class User
{
//some properties
public virtual List<Role> Roles { get; set; }
}
public class Role
{
//some properties
public virtual Form Form { get; set; }
}
public class Form
{
//some properties
}
答案 0 :(得分:1)
你不能在另一个包含中包含。使用linq表达式包含子路径的正确方法是使用select
DBContext.Users.Include(u =>u.Roles.Select(i=>i.Form)).ToList()