2014-12-11 71 views
0

我正在使用數據庫第一種方法在asp.net mvc-4 web項目上工作。現在我有以下上下文類: -在Dbcontext裏面的DbSet上使用Var,它會被當作IEnumerable還是IQueryable

Public partial class IT360servicedeskEntities : DbContext 
    { 
     public IT360servicedeskEntities() 
      : base("name=IT360servicedeskEntities") 
     { 
     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      throw new UnintentionalCodeFirstException(); 
     } 

     public DbSet<TAccount> TAccounts { get; set; } 
     public DbSet<TAccountStatu> TAccountStatus { get; set; } 
     public DbSet<TContactInfo> TContactInfoes { get; set; } 
     public DbSet<TGroup> TGroups { get; set; } 
     public DbSet<TLogin> TLogins { get; set; } 
     public DbSet<TOrganization> TOrganizations { get; set 

; }

現在,讓我們說我的模型類裏面我寫了以下內容: -

var test = context. TOrganizations; 
var2 = test.Where(a=>a.id == 100); 

所以我的問題會是怎樣的變種類型?它會被視爲IEnumerable或IQueryable,換句話說,我的上面的代碼會導致Where子句在內存或內部數據庫中執行? 謝謝

回答

1

當您撥打var t = test.Where(a=>a.id == 100)它將返回IQueryable<TOrganization>。在你的情況下,Where是IQueryable的擴展方法,調用這個方法將會操作Expression tree,但是沒有理由在數據庫內執行。當您對t進行foreach或調用t.ToList()/t.ToArray()時,它將訪問表達式樹並構建sql字符串,然後從數據庫中獲取數據。

+0

感謝您的回覆,這是否意味着dbset基本上是IQuerable? – 2014-12-11 10:19:00

+1

@johnG是的,'DbSet '執行'IQueryable ' – 2014-12-11 11:15:32

相關問題