2009-08-18 6 views
7

J'ai un scénario où j'ai des noms de colonnes configurés personnalisés, des opérateurs associés comme <> = entre etc. puis une valeur associée.Comment construire dynamiquement LINQ

J'essaie de déterminer s'il est possible de construire une requête LINQ avec une clause where dynamique?

J'ai remarqué les éléments Predicate.OR Preditcate.AND, mais ce n'est pas vraiment ce dont je parle.

Des suggestions?

+1

Possible en double de ce http://stackoverflow.com/questions/736952/the-best-way-to-build-dynamic-linq- question de requête –

+0

"Cependant linq dynamique ne fonctionne que sur IQueryable et non IEnumerable" - voir la note sur AsQueryable sur ma réponse ... –

Répondre

9

Si vous parlez d'une clause de chaîneWhere(plutôt que la construction de l'expression vous, etc.) - puis le Dynamic LINQ Library (dans les 3,5 échantillons, IIRC) devrait suffire.

Notez que l'exemple ci-dessous concerne l'utilisation de la base de données; mais vous pouvez l'utiliser avec LINQ-to-Objects en appelant .AsQueryable() sur vos données en mémoire.

alt text http://www.scottgu.com/blogposts/dynquery/step2.png

+0

Bien qu'Alex ait été le premier avec la bibliothèque Dynamic LINQ, la partie qui manquait a été soulevée par Marc (désolé de l'avoir manqué). Vous avez besoin de la méthode d'extension .AsQueryAble() pour pouvoir travailler avec vos collections. – Jabezz

8

En fait, il existe une bibliothèque spécifique de Microsoft (System.Linq.Dynamic) fournie avec les exemples C# VS2008 qui prennent en charge cette fonctionnalité. Obtenir de here (Microsoft Download)

La bibliothèque est incluse dans le répertoire \ LinqSamples \ DynamicQuery des exemples de téléchargement ci-dessus.

Pour de nombreux exemples d'utilisation vérifier cette page: http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

+0

Ok, System.Linq.Dynamic ressemble exactement à ce que je cherche à première vue. Cependant Linq dynamique ne fonctionne que sur IQueryable et non IEnumerable. Cela pose donc toujours un problème. – Jabezz

Questions connexes