在Dbcontext中的DbSet上使用Var,它将被视为IEnumerable或IQueryable

时间:2014-12-11 00:13:22

标签: asp.net-mvc entity-framework entity-framework-5

我正在使用数据库第一种方法开发一个asp.net mvc-4 web项目。现在我有以下Context类: -

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);

所以我的问题是var类型是什么?它将被视为IEnumerable或IQueryable,换句话说,我的上述代码会导致Where子句在内存或数据库内部执行吗? 感谢

1 个答案:

答案 0 :(得分:1)

当您致电var t = test.Where(a=>a.id == 100)时,它会返回IQueryable<TOrganization>。在你的情况下,Where is IQueryable的扩展方法,调用此方法将操作Expression tree,但没有理由在数据库内执行。当您预先t或致电t.ToList() / t.ToArray()时,它将访问Expression树并构建sql字符串,然后从数据库中获取数据。