我的實體模型類如下使用導航性能超過
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
..
現在我想從用戶..獲取所有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
。
如何編寫LINQ查詢以便將單個SQL查詢發佈到數據庫?
你的查詢發出更多的sql查詢es比我的做法.. :) – dotNETbeginner