Linq To SQL: trier la requête par nom de propriété (colonne) arbitraire

J'ai un plus grand/plus de problème complexe, mais par souci de simplicité, considérons les éléments suivants:

Permettez-nous de dire que j'ai une table dans la Base de données SQL appelé Produitayant deux colonnes, ID (int, clé primaire) et Nom (varchar/chaîne). J'ai aussi un simple LINQ DataContext.

J'ai une requête construite et remis à “mon” de la fonction. Permettez-nous de dire que c'est quelque chose comme: (mais il peut être un peu plus complexe)

IQueryable<Product> query = from p in db.Products select p;

Une fois ma méthode reçoit cette requête, transmise en tant que paramètre, il a changer l'ordre de tri par exemple

IQueryable<Product> sortedQuery = query.OrderBy(x => x.Name);

Je voudrais faire plus générique, c'est à dire de préciser le domaine de tri. Normalement, je peux faire une switch déclaration qui prend une chaîne de caractères. Cependant, je voudrais savoir si il existe un moyen de passer le paramètre directement. J'ai l'intention d'étendre à d'autres tables de Base de données, de sorte que ces switch des déclarations serait fastidieux.

J'ai essayé quelque chose comme:

IQueryable<Product> sortedQuery = query.OrderBy(x => (typeof(Product)).GetProperty(“Name”));

Mais cela ne fonctionne pas. Je tiens également à s'assurer que le LINQ to SQL est maintenu à savoir le tri à faire sur le Serveur SQL. Donc si je debug, je devrais recevoir une requête SQL de cette requête LINQ.

Je vous remercie d'avance pour votre aide.

source d'informationauteur O.O.