Ho trovato un metodo di estensione che gestisce l'ordinamento e il paging per LINQ. Mentre questo funziona bene, sto cercando di vedere se ci sono altri modi in cui posso usarlo.LINQ al metodo di estensione SQL per l'ordinamento e il paging
Attualmente, il codice per il extension method è il seguente:
public static IQueryable<T> Page<T, TResult>(
this IQueryable<T> obj,
int page,
int pageSize,
System.Linq.Expressions.Expression<Func<T, TResult>> keySelector,
bool asc,
out int rowsCount)
{
rowsCount = obj.Count();
int innerRows = (page - 1) * pageSize;
if (asc)
return obj.OrderBy(keySelector).Skip(innerRows).Take(pageSize).AsQueryable();
else
return obj.OrderByDescending(keySelector).Skip(innerRows).Take(pageSize).AsQueryable();
}
Il metodo prende in un'espressione, che si basa fuori del tipo.
Nella mia classe Dealer, Ho un metodo GetDealers, che chiede in sostanza questo, cioè
db.User.Page(1, 2, p => p.User.UserProperty.Name, true, out rowCount)
Dal lato presentazione delle cose, però, non so o posso accedere l'espressione di cui sopra, ad esempio,
ListView1.DataSource = users.GetDealers("SortColumn", pageNo, pageSize, out rowCount, bool asc);
ListView1.DataBind();
L'unico modo è quello di avere un'istruzione switch nel mio metodo GetDealers che avrebbe poi convertire l'espressione. C'è un modo per aggirare questo, o questo metodo è OK?