disons que nous avons une collection d'objets de personne et quelque part dans la collection définie par code p> Nous devons avoir un Filtre nécessitant filtrer la collection et renvoyer le résultat à l'utilisateur final. Disons que nous avons une collection d'objets de type filtre p> et quelque part dans le code, nous avons p> donc nous avons besoin Pour filtrer le contenu de la collection de la liste des personnes par des filtres définis dans la collection UserFilters. Où la
4 Réponses :
Vous pouvez le faire par réflexion: (non compilé, mais cela doit être le long de la bonne voie) P> P>
Frais! Honnêtement, je ne sais pas, si je vais appliquer cette technique sur mon code réel, c'est très gentil. J'aime des choses génériques, même si ce n'est pas si bon pour des raisons de performance. Malheureusement, je ne suis pas capable de voter pour votre réponse (ma réputation est de moins de 15 ans), mais la réponse est définitive.
Notez que cela ne fonctionnera pas sur la plupart des backends Linq; Je doute beaucoup sur SQL pourra traduire des appels de réflexion en SQL.
Oui je suis d'accord. Au fait, dans mon cas, je n'ai besoin d'aucune interaction DB.
Vous pouvez créer une expression Lambda pour créer un prédicat approprié à l'aide de la classe code> Expression CODE>.
public static IEnumerable<T> Where<T>(this IEnumerable<T> source,
IEnumerable<Filter> filters)
{
return Enumerable.Where(source, CreateFilterExpression<T>(filters).Compile());
}
J'ajouterais une méthode à la classe Code> Filtre Code> Pour vérifier si le filtre est satisfait:
var filtered_list = personsList.Where(p => userFilters.Any(f => f.IsSatisfied(p)));
Vous ne pouvez pas simplement faire
personList.Where(x => x.PersonName == "YourNameHere").ToList() ?
Le filtre est composé de propriétés de nom de terrain, donc je ne sais pas si l'utilisateur souhaite filtrer contre la personneName ou PersonAddress, ou peut être d'autres propriétés possibles de la classe de personnes.
Est-ce que cela utilise en mémoire LINQ ou LINQTOSQL?
Ceci est en mémoire LINQ. J'ai besoin d'interroger un ensemble d'objets définis dans la collecte avec des filtres définis dans une autre collection. Il n'y a pas d'interaction de DB.