2009-08-18 5 views
7

Ho uno scenario in cui ho nomi di colonne configurati personalizzati, operatori associati come <> = tra ecc. E quindi un valore associato.Come creare LINQ dinamicamente

Sto provando a determinare se è possibile creare una query LINQ con una clausola dynamic (stringa) where?

Ho notato la roba Predicate.OR Preditcate.AND, ma non è proprio quello di cui sto parlando.

Qualche suggerimento?

+1

Eventuali duplicati di questo http://stackoverflow.com/questions/736952/the-best-way-to-build-dynamic-linq- domanda di domanda –

+0

"Tuttavia Dynamic linq funziona solo su IQueryable e non su IEnumerable" - vedere la nota su AsQueryable sulla mia risposta ... –

risposta

9

Se si sta parlando di una stringaWhere clausola (piuttosto che costruire l'espressione ecc te stesso) - poi il Dynamic LINQ Library (nel 3.5 campioni, IIRC) dovrebbe sufficiente.

Si noti che l'esempio seguente è per l'utilizzo del database; ma puoi usarlo con LINQ-to-Objects chiamando .AsQueryable() sui tuoi dati in memoria.

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

+0

Sebbene Alex fosse il primo con la libreria Dynamic LINQ, la parte che mancava era stata sollevata da Marc (mi dispiace per averlo perso). È necessario il metodo di estensione .AsQueryAble() per poter lavorare con le raccolte. – Jabezz

8

In realtà, esiste una libreria specifica di Microsoft (System.Linq.Dynamic) fornita con gli esempi C# VS2008 che supporta questo. Scarica da here (Microsoft Download)

La libreria è inclusa nella directory \ LinqSamples \ DynamicQuery degli esempi di download sopra.

Per ampi esempi di utilizzo controllare questa pagina: 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 sembra esattamente quello che sto cercando a prima vista. Tuttavia, Dynamic linq funziona solo su IQueryable e non su IEnumerable. Quindi questo lascia ancora un po 'un problema. – Jabezz