Comment implémenter la fonctionnalité de recherche dans C # / ASP.NET MVC
Je suis en train d'élaborer un ASP.NET MVC 3 application à l'aide de C# et de Rasoir.
J'ai un formulaire de recherche qui ressemble à ceci:
Le formulaire de recherche fonctionne de la façon suivante:
- L'utilisateur de sélectionner les biens qu'ils veulent faire la recherche.
- L'utilisateur sélectionne la façon dont ils veulent correspondre à la chaîne de recherche (par exemple, contient, commence par, finit avec des égaux, etc).
- L'utilisateur entre un terme de recherche et clique sur Rechercher.
Les sélections dans la première liste déroulante directement liée à un bien dans mon ADO.NET Entity Framework modèle de classe (et donc directement à une colonne de la table).
Les utilisateurs doivent explicitement la capacité de sélectionner la propriété et la méthode de correspondance lors de la recherche, par exemple, un utilisateur sera explicitement recherche pour tous les matches de numéro de processus est '132'.
Ma première approche a été d'utiliser des dynamiques de linq pour construire une clause where à partir de critères de recherche (voir ma question initiale). Cependant, je commence à penser que ce n'est pas la meilleure façon de le faire.
J'espère aussi pour une solution qui ne nécessite pas de me coder en dur le résultat pour chaque propriété + critères de correspondance de combinaison.
Des suggestions sur comment je doit mettre en œuvre cette recherche? Il n'a pas à utiliser mon formulaire de recherche, totalement ouvert à d'autres idées qui correspondent aux exigences.
source d'informationauteur dnatoli
Vous devez vous connecter pour publier un commentaire.
Vous pouvez construire expression arbre où le prédicat à l'aide de code. Par exemple,
L'utiliser comme
Orders.DynamicWhere(searchBy, searchValue)
. Vous pouvez ajouter un paramètre plus à accepter l'opérateur est Égal à, Supérieur à, etc pour compléter la fonction.Voir ces liens pour plus d'info:
http://msdn.microsoft.com/en-us/library/bb882637.aspx
http://msdn.microsoft.com/en-us/library/bb397951.aspx
Également vérifier liste des méthodes sur l'Expression de la classe pour vous faire une idée.
Avez-vous regardé dans l'aide de Lucene.NET pour ce projet? compte tenu de la nature de vos recherches, il serait très simple à construire qu'à l'aide de Lucene, car il vous permet de combiner des filtres sur les différentes colonnes, tout comme vos exigences
Vous pouvez utiliser la Dynamique de Linq et vous pouvez créer la Où clausole avec un utilitaire de la classe comme ceci:
Sorte que vous pouvez construire un critère avec beaucoup de propriétés à l'aide de Ou de ou de et les méthodes Et les mettre dans le cas Où l'opérateur de la Dynamique de Linq.
Nous avons commencé la résolution des requêtes similaires à l'encontre de notre modèle d'Entity Framework à l'aide de dynamique des requêtes linq. Cependant, nos tentatives de généralisation de génération de requête a abouti à la mauvaise performance due à l'EF de confondre les résultant des expressions complexes, de sorte que dans la fin horrible SQL a été produit.
Nous avons eu recours à Entity SQL.
Vous ne savez pas si vous utilisez MS SQL. Semble SQL pourrait le faire la plupart du travail pour vous, et vous pouvez construire des requêtes dynamiques. Évidemment, la sélection/à partir de déclaration de besoin de travail, mais vous pouvez obtenir l'idée de la clause where.
Vous pourriez avoir le premier combo de la source de données définie à myEntityObject.GetType().GetProperties(), la seconde à une liste de affichables
Funcs<string, string, bool>
comme ceci:Plus tard, lorsque vous chargez le formulaire:
Et plus tard, lorsque vous voulez sélectionner vos entités: