Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Sorgularınızı uzaktan (veritabanı altyapısı sorguyu veritabanına karşı yürütür) veya yerel olarak yürütmeye karar verebilirim (LINQ to SQL sorguyu yerel önbellekte yürütür).
Uzaktan Yürütme
Aşağıdaki sorguyu göz önünde bulundurun:
Northwnd db = new Northwnd(@"northwnd.mdf");
Customer c = db.Customers.Single(x => x.CustomerID == "19283");
foreach (Order ord in
c.Orders.Where(o => o.ShippedDate.Value.Year == 1998))
{
// Do something.
}
Dim db As New Northwnd("c:\northwnd.mdf")
Dim c As Customer = _
(From cust In db.Customers _
Where cust.CustomerID = 19283).First()
Dim orders = From ord In c.Orders _
Where ord.ShippedDate.Value.Year = 1998
For Each nextOrder In orders
' Do something.
Next
Veritabanınızda binlerce sipariş satırı varsa, küçük bir alt kümeyi işlemek için tümünü almak istemezsiniz. LINQ to SQL'de EntitySet<TEntity> sınıfı arabirimini IQueryable uygular. Bu yaklaşım, bu tür sorguların uzaktan yürütülebilmesine olanak sağlar. Bu teknik, iki büyük fayda sağlar.
Gereksiz veriler alınmaz.
Veritabanı dizinleri nedeniyle veritabanı altyapısı tarafından yürütülen bir sorgu genellikle daha verimlidir.
Yerel Yürütme
Diğer durumlarda, yerel önbellekte ilgili varlık kümesinin tamamının olmasını isteyebilirsiniz. Bu amaçla, EntitySet<TEntity> yöntemini sağlayarak Load öğesinin tüm üyelerini EntitySet<TEntity> açıkça yükler.
EntitySet<TEntity> zaten yüklüyse, sonraki sorgular yerel olarak yürütülür. Bu yaklaşım iki şekilde yardımcı olur:
Kümenin tamamının yerel olarak veya birden çok kez kullanılması gerekiyorsa, uzak sorgulardan ve ilişkili gecikme sürelerinden kaçınabilirsiniz.
Varlık, eksiksiz bir varlık olarak seri hale getirilebilir.
Aşağıdaki kod parçası, yerel yürütmenin nasıl alınabileceğini gösterir:
Northwnd db = new Northwnd(@"northwnd.mdf");
Customer c = db.Customers.Single(x => x.CustomerID == "19283");
c.Orders.Load();
foreach (Order ord in
c.Orders.Where(o => o.ShippedDate.Value.Year == 1998))
{
// Do something.
}
}
Dim db As New Northwnd("c:\northwnd.mdf")
Dim c As Customer = _
(From cust In db.Customers _
Where cust.CustomerID = 19283).First
c.Orders.Load()
Dim orders = From ord In c.Orders _
Where ord.ShippedDate.Value.Year = 1998
For Each nextOrder In orders
' Do something.
Next
Karşılaştırma
Bu iki özellik, seçeneklerin güçlü bir birleşimini sağlar: büyük koleksiyonlar için uzaktan yürütme ve küçük koleksiyonlar için yerel yürütme veya koleksiyonun tamamının gerekli olduğu yer. Uzaktan yürütme IQueryable üzerinden gerçekleştirilirken, bellek içi IEnumerable<T> bir koleksiyona karşı yerel yürütme uygularsınız. Yerel yürütmeyi zorlamak için (yani, IEnumerable<T>), bkz Türü Genel IEnumerable'a Dönüştürme.
Sıralanmamış Kümelere Karşı Sorgular
Uygulayan yerel koleksiyon ile ilişkisel List<T> karşı yürütülen uzak sorgular sağlayan bir koleksiyon arasındaki önemli farka dikkat edin. List<T> dizin değerleri kullananlar gibi yöntemler liste semantiği gerektirir ve bunlar genellikle sıralanmamış bir kümeye karşı uzak sorgu aracılığıyla alınamaz. Bu nedenle, bu tür yöntemler EntitySet<TEntity> öğesini yükleyerek yerel yürütmeye izin verir.