Je veux créer une manière dynamique de renvoyer une liste triée par le paramètre xy. La liste peut être triée par ordre décroissant, ascendant, par identifiant, nom d'utilisateur, courrier électronique et bien d'autres choses encore.dotnet .net core 2 OrderBy/OrderByDescending avec le paramètre générique
Je reçois ce paramètre sous forme de chaîne. Ainsi par exemple sort=-username
Le moins indique que la liste est descendante. Et le paramètre de tri est nom d'utilisateur.
Je reviens donc user.OrderByDescending(o => o.Username).ToList();
Au moment, avec l'aide d'une longue construction si-bien je perçois que le tri est nécessaire. Mon espoir est que je peux remplacer le paramètre de chaîne de tri avec l'aide d'une fonction au paramètre d'objet.
pseudocode
//input for example: sort=-username
Boolean isAscending = isAscending(sort) //return true or false
var parameter = isSortStringInsideObject(sort) //
if (isAscending) {
user.OrderBy(o => o.parameter).ToList();
} else {
user.OrderByDescending(o => o.parameter).ToList();
}
Donc paramètre peut être tous les paramètres dans l'objet.
Je suis nouveau dans le noyau .net. J'espère donc que je n'ai pas formulé d'exigence utopique.
réflexion pourrait être utile ici: https://stackoverflow.com/a/19276588/1462295 – BurnsBA
vous pourriez utiliser la réflexion d'une certaine manière, mais pour être honnête, à moins qu'il y ait vraiment beaucoup de propriétés différentes, vous feriez mieux d'utiliser simplement une grosse déclaration de commutateur – mikelegg
Vous avez peut-être déjà essayé, mais avez-vous envisagé d'inclure la bibliothèque System.Linq.Dynamic à votre projet? Cela vous permettrait de faire des tris dynamiques (basés sur des chaînes de caractères) – ullfindsmit