Je cherche à mettre en place un système permettant à une utilisation des conditions "Création", puis renvoyez les données résultantes de la base de données. À l'heure actuelle, il existe une procédure stockée qui génère SQL à la volée et l'exécute. C'est un problème particulier que je veux supprimer.
Mon problème provient du fait que je peux avoir plusieurs domaines dans mes critères et pour chacun de ces champs, il pourrait y avoir une valeur de 1 ou plus, avec différents opérateurs potentiels . P>
Par exemple, P>
Formatted Condition For Email: Email="email1@domain.com"||Email="email2@domain.com" Formatted Condition For Field1: Field1="Chris"
3 Réponses :
Je pense que Dynamic Linq sera une option. DLINQ vous permet de spécifier une partie de la requête LINQ en tant que "chaîne" et DLINQ compile ensuite cette chaîne à l'arborescence d'expression afin que celle-ci soit transmise au fournisseur LINQ sous-jacent. Votre besoin est aussi pareil que vous devez créer des arbres d'expression au moment de l'exécution. p>
Je vous suggère de faire la propriété de l'opérateur code> dans
FieldCriteria code> en tant que
Enum code> qui représente toutes les opérations requises (égale, moins ). Ensuite, vous devrez écrire une fonction qui prend une liste de
FieldCriteria CODE> et renvoie une chaîne "Expression" qui peut ensuite être introduite dans DLINQ pour obtenir l'arborescence d'expression. P>
Toute l'idée de "LINQ to " est de convertir des expressions de temps compilées C # statiques à une sorte de chaîne à envoyer à la base de données sous-jacente à l'exécution. Votre suggestion d'utiliser une chaîne à convertir en une expression linq à son tour convertie en une chaîne semble un peu redondante :)
Vous êtes correct sur l'expression "statique" à SQL, mais dans la question que l'utilisateur ne connaît pas l'expression à l'heure de la compilation et que vous devez donc générer des expressions au moment de l'exécution. DLINQ est un moyen de le faire à partir de "chaînes" et d'autre manière consiste à utiliser l'expression API pour créer les expressions requises au moment de l'exécution.
Le truc avec Linq serait de construire une expression en particulier, noter comment code> à partir des données. À titre d'exemple, illustrer l'exemple présenté:
andalso code> peut être utilisé pour composer les différentes opérations (identiques à plusieurs
Où code>, mais plus simple). P> p>
Le code ci-dessus ne nécessite-il pas de connaître les champs / critères / opérateur? Dans mon scénario. Aucun n'est connu au moment de la compilation et il doit être complètement dynamique à cet égard. Pardonne-moi que je me trompe alors que les fonctions de Lambda sont un peu hors de mes connaissances actuelles.
@Chris non, mais vous devrez écrire du code qui génère les expressions
Comment utiliser dans l'intérieur où la clause?
Ceci peut simplement être fait par LINQ où vous attachez des opérateurs supplémentaires à l'objet de requête. Voici un exemple.
query = db.Contacts.Where( ... ); query = query.Where( ... ); query = query.Where( ... );
Ceci est pour et logique, mais qu'en est-il ou de la logique?