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>