📋
DATA ACCESS
  • DATA ACCESS
  • Object Relation Mapping
  • Entity Framework
  • Lazy Loading vs Eager Loading
  • IQuareble and IEnumareble
  • Garbage Collector Memory Managment
  • Stack ve Heap Çalışma Mantığı Nedir?
Powered by GitBook
On this page
  • IQuareble;
  • IEnumareble;

Was this helpful?

IQuareble and IEnumareble

IQuareble;

Şarta bağlı query oluşturarak doğrudan veritabanı üzerinde sorgulama işlemi yapar. Sorgular Linq to sql düzeyinde yapılır.

 private static void GetId()
{
   using (var context = new EfDbContext())
   {

      IQueryable<Employee> employeeList = context.Employies;

      IQueryable<Employee> employeeListFilter1 = employeeList.Where(x => x.Age > 5);

      IQueryable<Employee> employeeListFilter2 = employeeListFilter1.Where(x => x.Age == 26);

      //Tüm Employee Listesini Yazdırma
      foreach (var item in employeeListFilter2)
      {
        Console.WriteLine("First Name:{0} - Last Name:{1} - Age:{2}\n", item.FirstName, item.LastName, item.Age);
      }
   }
}

IEnumareble;

Tüm verileri memoryde tutarak sorgulama işlemlerini memory üzerinden yapar. Sogular Linq to Object düzeyinde yapılır.

private static void GetIEnumerable()
{

   using (var context = new EfDbContext())
   {

   IEnumerable<Employee> employeeList = context.Employies;

   IEnumerable<Employee> employeeListFilter1 = employeeList.Where(x => x.Age > 5);

   IEnumerable<Employee> employeeListFilter2 = employeeListFilter1.Where(x => x.Age == 26);

 
     //Tüm Employee Listesini Yazdırma
     foreach (var item in employeeList)
     {
        Console.WriteLine("First Name:{0} - Last Name:{1} - Age:{2}\n", item.FirstName, item.LastName, item.Age);
      }
   }
}

Bakıldığında ikisi içinde aynı sorgu yazıldığı görülecektir. Her ne kadar yazılan kodlar aynı olsada yapılan işlemler farklıdır. IEnumerable ile önce Employee listesi hafızya alınır ve tutulur.Daha sonra where şartları hafızadaki liste üzerine yapılır ve ona göre yazdırılır. IQuearyble da ise belirtilen şartları önce birleştirip tek bir Linq to sorgusuna çevirip müteakiben sorgulama direk veri tabanı üzerinde yapılır.

IQueryable

IEnumerable

IQueryable ise şartlara bağlı query oluşturarak doğrudan veritabanı üzerinden sorgulama işlemi yapar

IEnumerable tüm verileri alıp memory de tutarak, sorgulama işlemlerini memory üzerinden yapar

hafıza dışındaki yani veritabanı için idealdir.

Hafızadaki koleksiyonlar için idealdir.

CreateQuery ve Execute yöntemlerine sahiptir. doğrudan özel sorgular yazdırılıp çalıştırılabilir.

Özel sorguların yazılmasını desteklemez

lazy loading özelliğini destekler

lazy loading özelliğini desteklemez

İkisi arasındaki en önemli bağlantı IQuearyble'ın IEnumerable yerine kullanılıyor olabilmesidir. yani onu kapsıyor olabilmesidir.

Eğer milyonlarca kayıt üzerinde sorgulama işlemi yapıyorsak elbette IQueryable IEnumerable göre daha hızlı sorgulama işlemi yapar.

PreviousLazy Loading vs Eager LoadingNextGarbage Collector Memory Managment

Last updated 4 years ago

Was this helpful?