2009-10-15 7 views
1

Je récemment ceci:Linq2Sql - Stockage des expressions Linq en texte clair (LINQ) pour l'exécution future dynamique

Linq2Sql - Storing Complex Linq Queries for future dynamic execuction - raw text - possible?

Il a répondu à une question, mais m'a envoyé un chemin différent en raison de la sous-requête avoir besoin de référence la même table la requête d'origine existe déjà.

J'ai été capable de faire exactement ce que je voulais faire dans Linqpad en utilisant le mot-clé "let".

de posMain dans DataEventView let posSub = de posSub1 dans DataEventView où posSub1.CheckNumber == posMain.CheckNumber & & posSub1.EventTypeID == 7 select posSub1 où posMain.EventTypeID == 6 & & posSub.Any() select posMain

Cela crée effectivement la sous-requête que j'ai essayé de faire. Maintenant, je pensais --- Je voudrais vraiment créer dynamiquement l'objet IQueryable en mémoire, et puis mon application peut y faire référence, et continuer à ajouter des expressions à celui-ci si nécessaire.

Je pense que je vais devoir faire avec le CodeDom, mais il peut y avoir une façon plus élégante d'obtenir le IQueryable de juste avoir Texte brut pour commencer. Quelqu'un at-il dû stocker une déclaration linq pour une future exécution? Ces instructions sont dynamiques par client, elles ne peuvent donc pas être respectées dans le cadre. Peut-être qu'il y a une meilleure idée?

Merci d'avance.

Travis

Répondre

0

Vous pouvez utiliser les arbres d'expression.

Certains sampels sont fournis here

+0

Cest pas vraiment ce que je suis en train de faire. Les arbres d'expression sont faciles. J'essaie de comprendre comment stocker une instruction linq en tant que texte clair, puis l'exécuter à la demande sur certaines expressions valides en mémoire, puis continuer à utiliser IQueryable après l'exécution du texte en clair. Texte clair signifiant l'ensemble de la déclaration linq écrite en caractères lisibles. Merci quand même. – TravisWhidden