2009-08-18 16 views
7

Mam scenariusz, w którym mam niestandardowe skonfigurowane nazwy kolumn, powiązane operatory, takie jak <> = między itp., A następnie powiązana z nimi wartość.Jak dynamicznie budować LINQ

Próbuję ustalić, czy możliwe jest zbudowanie kwerendy LINQ z dynamicznym (ciąg) klauzuli where?

Zauważyłem rzeczy Predicate.OR Preditcate.AND, ale to nie jest to, o czym mówię.

Wszelkie sugestie?

+1

Możliwa Duplikat to http://stackoverflow.com/questions/736952/the-best-way-to-build-dynamic-linq- pytanie zapytanie –

+0

"Jednak Dynamic linq działa tylko na IQueryable, a nie IEnumerable" - zobacz notatkę na temat AsQueryable w mojej odpowiedzi ... –

Odpowiedz

9

Jeśli mówimy o strunWhere klauzuli (zamiast budowania ekspresji itd siebie) - wtedy Dynamic LINQ Library (w 3,5 próbek, IIRC) powinny wystarczać.

Należy zwrócić uwagę, że poniższy przykład dotyczy użycia bazy danych; ale możesz użyć go z LINQ-to-Object, wywołując .AsQueryable() na swoich danych w pamięci.

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

+0

Chociaż Alex był pierwszym z biblioteki Dynamic LINQ, część, której brakowało została podniesiona przez Marca (przepraszam, że tęskniłem za tym). Potrzebujesz metody rozszerzenia .AsQueryAble(), aby móc pracować ze swoimi kolekcjami. – Jabezz

8

W rzeczywistości istnieje specyficzna biblioteka firmy Microsoft (System.Linq.Dynamic) dostarczana z próbkami C# VS2008, które obsługują to. Pobierz go z katalogu here (Microsoft Download)

Biblioteka znajduje się w katalogu \ LinqSamples \ DynamicQuery próbek powyższych plików do pobrania.

Na rozległych przykłady stosowania sprawdzić tę stronę: 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 wygląda dokładnie to, czego szukam na pierwszy rzut oka. Jednak Dynamic linq działa tylko na IQueryable, a nie IEnumerable. To nadal pozostawia pewien problem. – Jabezz

Powiązane problemy