我有以下代表简单关系的实体类。
user => NetworkRoles => NetworkRolePrivilege => UserPrivilege
class user
{
protected ICollection<UserNetworkRole>
NetworkRoles{ get; set; }
}
class NetworkRoles
{
public ICollection<NetworkRolePrivilege> NetworkRolePrivilege { get; set; }
}
class NetworkRolePrivilege
{
public UserPrivilege UserPrivilege { get; set; }
}
class UserPrivilege
{
public bool Enabled { get; set; }
}
我想从UserPrivilege表中获取具有Enabled标志为true的用户。我无法获取LINQ查询。以下是我尝试的代码片段。
db.user.Where(x=>x.NetworkRoles.Where(m=>m.NetworkRolePrivilege.Where(k=>k.UserPrivilege.Enabled))) // does not work due to last where condition.
以下操作无效,因为未定义导航属性
db.user.Include(x => x.NetworkRoles.Select(m => m.NetworkRolePrivilege.Select(l => l.UserPrivilege.Enabled)))
通过一些搜索,我发现我们需要为其使用投影,但无法获取。
var query = db.user.Select(x=>new
{
user = x,networkRolePrivilege = x.NetworkRoles.SelectMany(n=>n.NetworkRolePrivilege.Where(m=>m.UserPrivilege.Enabled))
}).....
请帮助Linq查询,以使用户启用UserPrivilege = true
预先感谢
更新
由于NetworkRoles不直接是映射属性或导航属性,文斯答案给出了以下错误
System.NotSupportedException:在LINQ to Entities中不支持指定的类型成员'NetworkRoles'。仅支持初始化程序,实体成员和实体导航属性。'