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
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ı:
Neden metin dosyaları Apache tarafında...
MySQL sorgularda, neden kullanın katıl...
Adı yerine olabilirdi kullanın neden J...
Neden IEnumerable<T>.ToList<T...
Neden kullanın .h1 yerine gerçek h1?...