次のようなエンティティモデルクラスがあります
public partial class User
{
public User()
{
this.webpages_Roles = new HashSet<webpages_Roles>();
}
public int UserID { get; set; }
public virtual ICollection<webpages_Roles> webpages_Roles { get; set; }
}
.
public partial class webpages_Roles
{
public webpages_Roles()
{
this.Users = new HashSet<User>();
this.Roles_X_ApplicationModules =
new HashSet<Roles_X_ApplicationModules>();
}
public int RoleId { get; set; }
public virtual ICollection<User> Users { get; set; }
public virtual ICollection<Roles_X_ApplicationModules>
Roles_X_ApplicationModules { get; set; }
}
.
public partial class Roles_X_ApplicationModules
{
public long ID { get; set; }
public Nullable<int> ModuleID { get; set; }
public Nullable<int> RoleID { get; set; }
public Nullable<bool> ViewPermission { get; set; }
public virtual ApplicationModule ApplicationModule { get; set; }
public virtual webpages_Roles webpages_Roles { get; set; }
}
。と
public partial class ApplicationModule
{
public ApplicationModule()
{
this.Roles_X_ApplicationModules =
new HashSet<Roles_X_ApplicationModules>();
}
public int ModuleID { get; set; }
public virtual ICollection<Roles_X_ApplicationModules>
Roles_X_ApplicationModules { get; set; }
}
User
オブジェクトにナビゲーション プロパティがあり、このwebpages_Roles
プロパティにもナビゲーション プロパティがRoles_X_ApplicationModules
あり、次にApplicationModule
..に移動することがわかります。
今、私は User からすべての ApplicationModule を取得したい..ナビゲーション プロパティを使用してクエリを作成するにはどうすればよいですか..
私はこのようなものを試しました..
var appModules = user.webpages_Roles.SingleOrDefault()
.Roles_X_ApplicationModules.Where(z => z.ViewPermission == true)
.Select(x => x.ApplicationModule);
しかし、これの問題は、データベースに対して単一のクエリを発行しないことです。クエリを分割して を取得しwebpages_Roles
、次に に基づいてSingleOrDefault
を取得する別のクエリを分割し、最後に を取得する条件に一致する数のクエリを分割します。Roles_X_ApplicationModules
RoleId
Roles_X_ApplicationModules
ApplicationModule
単一の SQL クエリがデータベースに発行されるように LINQ クエリを作成するにはどうすればよいですか?