Проблема здесь
(x.RoleScreens.Any(y => x.IsCheck== false && y.ScreenID == x.ParentID && listUserRoleIDs.Any(z => z == y.RoleID)))
Я не совсем уверен, что вы хотите, но если вы хотите, как вы написали, и хотите ЛЮБОГО ребенка, тогда должно быть:
(x.RoleScreens.Any(y => x.IsCheck== false && y.ScreenID == x.ParentID))
, так как listUserRoleIDs.Any (z => z == y.RoleID) отфильтровывает всех детей, у которых нет RoleID.
, с другой стороны, если вы хотите вседети экранов, у которых есть роль, тогда, вероятно, лучше разделить ее на две части:
var Parents = this.context.Screens.Where(x => (x.IsActive == true) &&
(x.RoleScreens.Any(y => listUserRoleIDs.Any(z => z == y.RoleID))));
var Children = this.context.Screens.Where(x => (x.IsActive == true) && (x.IsCheck== false) && (Parents.Any(y => x.ParentID == y.ScreenID)));
var List = Parents.Union(Children).ToList();