6
votes

Direction de tri Linq de la chaîne

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;
}


0 commentaires

3 Réponses :


2
votes

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);


0 commentaires

12
votes

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); 
    }
}


3 commentaires

Fonctionne génial, merci. J'ai changé le bool pour utiliser system.componentmodel.listsTDirection


Un ibindinglist / ibindingListview , alors?


Nous avions une fois le "Il y a une application pour ça" Fad,



0
votes

Regardez les échantillons de code CS. Il existe des exemples dynamiques LINQ.

des échantillons: xxx

ordre par code: xxx

mais être Assurez-vous de vérifier l'entrée utilisateur!


0 commentaires