SORU
6 Ocak 2010, ÇARŞAMBA


Neden kullanın .() AsEnumerable IEnumerable<T>?döküm yerine

IEnumerable<T> uzatma yöntemleri .AsEnumerable(). Bu yöntem IEnumerable<T> örnek adı üzerinde sayısız nesneye dönüştürür. Bir nesne bu bir uzantısı yöntemi uygulamak için IEnumerable<T> uygulamak zorunda olduğundan, ancak, IEnumerable<T> dönüştürme 12* *döküm basit bir mesele değildir. Benim sorum neden bu yöntem hiç var mı?

Örnek:

List<string> strings = new List<string>() { "test", "test2", "test3" };
IEnumerable<string> stringsEnum1 = strings.AsEnumerable();
IEnumerable<string> stringsEnum2 = (IEnumerable<string>)strings;

, stringsEnum1 stringsEnum2 yukarıdaki örnek eşdeğerdir. Uzantısı yöntemi ne anlamı var?

EditBir sonucu olarak, neden IQueryable<T> döküm eşdeğer olduğunda .AsQueryable() bir yöntem var mı?

CEVAP
6 Ocak 2010, ÇARŞAMBA


Okunabilirlik asıl sorun burada. Bunu göz önünde bulundurun

Table.AsEnumerable().Where(somePredicate)

çok daha okunabilir

((IEnumerable<TableObject>)Table).Where(somePredicate).

Ya da SQL Server üzerinde sorgu ve bellekte kalan kısmını yürütmek isteyen düşünün:

Table.Where(somePredicate)
     .Select(someProjection)
     .AsEnumerable()
     .SomethingElse()

karşı

((IEnumerable<SomeProjectionType>)Table.Where(somePredicate)
                                       .Select(someProjection))
                                       .SomethingElse()

Böyle bir yöntem yararlı değildir neden şimdi DataContext SQL için bir SERİ Table bir örnek düşünün. Table IQueryable gibi IEnumerable bunu uygular. Sonuçları Table gibi ve bir dizi Where bir yöntem çağırdığınızda, kod sonunda bir SQL Server üzerinde çalıştırılacak SQL deyimi neden yürütülür. Ne AsEnumerable mu diyor, hayır, istemiyorum kullanın kontrol ETMENİZ için SQL sağlayıcısı yürütmek Where, kullanmak istiyorum kontrol ETMENİZ için Nesneleri uygulama Where.

Üzerinde numaralandırma böylece

Table.Where(somePredicate)

bir sorgu numaralandırma üzerinde ise SQL Server üzerinde çalıştırılmasına sebep olur

Table.AsEnumerable().Where(somePredicate)

belleğe tablo Table tarafından temsil getiriyor ve bellek Where işlevsellik (ve SQL Server üzerinde değil!) yürütür

IEnumerable yöntemleri belirli bir uygulama gizlemek için izin ve bunun yerine standart bir uygulama kullanın. Bu AsEnumerable manası:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • george sarintzotis

    george sarin

    2 Aralık 2007
  • Rachel Raum

    Rachel Raum

    10 EYLÜL 2007
  • wwjoshdo

    wwjoshdo

    25 Mayıs 2009