在被包含的对象上使用Include扩展

本文关键字:Include 扩展 对象 包含 | 更新日期: 2023-09-27 18:18:43

我首先使用EF和代码。我创建了一个User对象,其中包含对象Role的列表。每个Role对象包含一个Form类型的对象。我想获得一个特定用户的所有角色,包括"Form"对象。

为了更好地理解:user 1<->n role 1<-> 1 Form

我试过这样做:

DBContext.Users.Include(u => u.Roles.AsQueryable().Include(i=>i.Form)).ToList().Where(r => r.Username.Equals(id)).FirstOrDefault<User>();

结果是:

Include路径表达式必须引用在该类型上定义的导航属性。对引用导航属性使用点点路径,对集合导航属性使用Select操作符。参数名称:path

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
}

在被包含的对象上使用Include扩展

不能在另一个include中执行include。使用linq表达式包含子路径的正确方法是使用select

DBContext.Users.Include(u =>u.Roles.Select(i=>i.Form)).ToList()