J'essaie de trier un ensemble d'utilisateurs. J'ai accès à la propriété de tri et à la direction (ASC, Desc). Ma commande actuelle par requête est ci-dessous. Mais comme vous pouvez le constater, cela ne tient pas compte de la direction de tri. Comment puis-je construire cette expression sans avoir à utiliser linq dynamique ou à ajouter un autre ensemble d'instructions pour «ASC» ou «DESC».
public override IQueryable<DalLinq.User> GetSort(IQueryable<DalLinq.User> query) { //SelectArgs.SortDirection <- Sort Direction switch (SelectArgs.SortProperty) { case "LastName": query = query.OrderBy(p => p.LastName); break; case "FirstName": query = query.OrderBy(p => p.FirstName); break; default: query = query.OrderBy(p => p.UserName); break; } return query; }
3 Réponses :
Ce serait une déclaration si je pense, pas d'autre moyen simple de le faire, c'est-à-dire:
query = (SelectArgs.SortDirection == "asc") ? query.OrderBy(p => p.LastName) : query.OrderByDescending(p => p.LastName);
Idéalement, vous voulez utiliser OrderByDescendant CODE> - Vous pouvez bien sûr tricher:
public static class MyExtensionMethods
{
public static IOrderedQueryable<TSource> OrderBy<TSource,TValue>(
this IQueryable<TSource> source,
Expression<Func<TSource,TValue>> selector,
bool asc)
{
return asc ? source.OrderBy(selector) : source.OrderByDescending(selector);
}
}
Fonctionne génial, merci. J'ai changé le bool pour utiliser system.componentmodel.listsTDirection
Un ibindinglist code> /
ibindingListview code>, alors?
Nous avions une fois le "Il y a une application pour ça" Fad,
Regardez les échantillons de code CS. Il existe des exemples dynamiques LINQ.
des échantillons: p> ordre par code: p> mais être Assurez-vous de vérifier l'entrée utilisateur! p> p>