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

  • Gigawipf

    Gigawipf

    18 ŞUBAT 2010
  • Numberphile

    Numberphile

    15 EYLÜL 2011
  • The White House

    The White Ho

    21 Ocak 2006