nous avons trouvé une méthode d'extension qui gère le tri et la pagination pour LINQ. Bien que cela fonctionne bien, j'essaie de voir s'il y a d'autres façons de l'utiliser.LINQ à la méthode d'extension SQL pour le tri et la pagination
À l'heure actuelle, le code de la extension method est la suivante:
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();
}
La méthode prend dans une expression, qui est basé sur le type.
Dans ma classe de revendeur, j'ai une méthode GetDealers, qui appelle essentiellement ce, dire
db.User.Page(1, 2, p => p.User.UserProperty.Name, true, out rowCount)
Du côté de la présentation des choses bien, je ne sais pas ou ne peut accéder à l'expression comme ci-dessus, par exemple
ListView1.DataSource = users.GetDealers("SortColumn", pageNo, pageSize, out rowCount, bool asc);
ListView1.DataBind();
La seule façon est d'avoir une instruction switch dans ma méthode GetDealers qui ensuite se convertir à l'expression. Existe-t-il un moyen de contourner ceci, ou cette méthode est-elle correcte?