0
votes

Comment passer des paramètres de recherche, dans la fonction qui recherchera une collection C #

suppose que j'ai une collection de la forme: xxx

Je peux trier cette liste via prénom à l'aide de: xxx

Je voudrais faire cela à l'intérieur d'une fonction, de sorte que je puisse passer le paramètre de recherche souhaité. Quelque chose comme: xxx

évidemment ici, je ne peux pas passer dans le champ de recherche souhaité de cette façon, mais est-il possible de faire ce que je demande?


9 commentaires

Vous pouvez transmettre une fonction func qui contiendra l'attribut souhaité


Je ne me dérangerais pas avec une méthode pour faire cela. Il suffit d'utiliser ienumerable.orderby , tel quel, ou trier . et travailler sur des poissons plus gros


Ne pensez pas que vous puissiez déduire une propriété comme celle-là sans réflexion ni une autre sorcellerie. Mais une question, pourquoi utilisez-vous un prédicat de tri pour les types de base intégrés comme une chaîne dans cet exemple?


S'il vous plaît partager un exemple de ce que vous essayez de faire.


Pourquoi voulez-vous faire le tri en fonction du terme de recherche générique. C # Linq a déjà donné que LINQ OrderBy () et Trier () Méthodes où vous pouvez transmettre le prédicat en fonction de vos besoins. Comme mymembers.sort (x => x.id); ou myMembers.sort (x => x.firstname); ou myMembers.sort (x = > x.lastname); Je crois que vous réinventez simplement les roues. Corrigez-moi si je me trompe ici


Quel est le problème avec mycollection.orderby (membre => membre.id) ? Nice et simple.


Vous pouvez suivre le mot-clé expressions de requête dynamique.


Qu'est-ce que un SearchTerm être? Est-il demandé par l'utilisateur? Si vous souhaitez définir vos propres paramètres, vous voudrez peut-être effectuer des recherches sur la manière de mettre en œuvre un Icomarer .


La raison pour laquelle je veux faire cela est, je n'ai donc pas besoin de retaper la même ligne encore et encore. J'ai créé cet exemple et ce n'est pas mon vrai cas d'utilisation ... Mes données réelles auront des dizaines de colonnes différentes de données dans la collection. Si je peux créer une fonction, je passe juste le paramètre de tri et la liste, et cela me sauvegardera de codage rigide dans un tas de lignes différentes qui rechercheront des paramètres différents.


4 Réponses :


0
votes

démo sur Dotnet Fiddle

Il me semble que vous pouvez utiliser Func <> pour pouvoir utiliser à la commande dynamique par. xxx

lisez le message suivant pour mieux comprendre

Ordre dynamique par Linq


1 commentaires

Cela ne fait rien d'autre que de crée plus de CIL et rend l'utilisateur de type texte pour obtenir la même chose



0
votes

au lieu d'écrire une autre enveloppe sur Linq .Orderby () code> ou .sort () code> méthode et appelant que vous souhaitez trier, utilisez Linq Eckby () code> ou .sort () code> méthode

Utilisez Trier () code> Comme p>

//If you want to sort collection by Id then
myMembers.Sort(x => x.Id); 

//If you want to sort collection by FirstName then
myMembers.Sort(x => x.FirstName);

...


0 commentaires

0
votes

Pourquoi ne pas simplement utiliser la fonction intégrée?

myMembers.OrderByWrapper(m => m.FirstName)


0 commentaires

1
votes

Vous pouvez créer une méthode d'extension générique pour cela et passer FUNC CODE> délégué à celui-ci, qui est utilisé comme sélecteur de clé pour incorporer méthode code> xxx PRE>

Gardez à l'esprit que vous devriez comparer les mêmes champs d'objets comparés. p>

Exemple de l'utilisation P>

Comparison<Member> comparison = (x, y) => x.FirstName.CompareTo(y.FirstName);
myMembers.Sort(comparison);


1 commentaires

@Pelt fait-il répondre à votre question? Avez-vous besoin de plus d'informations ou de détails?