У меня есть следующие классы сущностей, которые кратко представляют отношения.
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; }
}
Я хочу получить пользователей, у которых флаг Enabled установлен в true, из таблицы UserPrivilege. Я не могу получить запрос 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 не является напрямую сопоставленным свойством или свойством Navigation, ответ Винса дает мне следующую ошибку
System.NotSupportedException: «Указанный член типа« NetworkRoles »не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, элементы сущностей и свойства навигации сущностей. '