ile kullanın IQueryable.Count
IList<T>
veya
IQueryable<T>
ile kullanılabilir sayfalandırmada diyelim bir sınıf düşünün. Bu sınıf,
int TotalItems
özelliğine sahip olacaktır; bu, (bu şaşırtıcı değil), uygulanabilir veya sayılabilir parametrelerin sayısını alacak/ayarlayacaktır.
Count()
yöntem olacaktır
//simplified
public Pagination(IEnumerable<T> query)
{
TotalItems = query.Count();
}
ben parametre olarak IEnumerable<T>
kullanırsanız, Enumerable.Count()
(Yanlış değilsem , konu bu var). Bu nedenle, sorgu bir IQueryable<T>
(IEnumerable<T>
öğesinden devralınır) olsa bile, numaralandırılır (bu açıkça bir "db sorgusuyla istenmez").
Yani 2 ctor
//simplified
public Pagination(IEnumerable<T> query)
{
TotalItems = query.Count();
}
public Pagination(IQueryable<T> query)
{
TotalItems = query.Count();
}
DÜZENLEME, benim IEnumerable<T>
aslında bir IQueryable<T>
olduğunda Queryable.Count()
yöntemi kullanmak için bir yol yoktur, yoksa bu durumda örneğin, sahip benim tasarımını değiştirmek zorunda yapmak Ben IEnumerable<T>
devralan IQueryable<T>
IEnumerable<T>
ve IQueryable<T>
aynı adla uzantısı yöntemlerine sahip olduğu gerçeği ile ilgisi olduğunu anlıyorum ve bu böyle "onlar aynı şeyi benziyor" uzantısı yöntemi için aynı adları, olması güzel, ama bence Hala bazen aynı "mimarisi" ile,
onlar çerçevede, başka örnekler var merak için ...
Jenerik soruyu kafa karıştırıcı: uzatma yöntemleri için kalıtım + ortak isimler?
neden bir "int" yi kabul etmiyor ve sayımın nereden geldiği bir sıralama/sorgu saymasına izin vermiyor? – Servy
@AakashM iyi, bu soru gerçek bir denemeden sonra ve MiniProfiler sonuçlarına bir bakış gelir: Ben kötü bir yorumlama yapmış olabilir, bu durumda, kafamı bir duvara çarptıracağım;) –
@Servy sivri olarak, bu basitleştirilmiş bir durumdur, 'query' parametresini sınıfımdaki diğer amaçlarla kullanmak isteyebilir ve aynı soruna sahip olan (sorun varsa) diğer "paylaşılan" sorgulanabilir veya Enumerable uzantı yöntemlerini çağırmak isteyebilirim. –