Lambda Expression

0

Witam, czy jest możliwość dostać się jakoś do zawartości Expression<Func<>> ?

Mamy jakąś metode np.

 
public void Test(Expression<Func<TestowaKlasa,bool>> expression)
{
//cialo metody
}

w ciele metody chciałbym się dostać do zawartości epxression, do wymienionych tam pól i wartości sprawdzanych, oraz ich typów. Efekt który chciałbym uzyskać widzę na break poincie na jakieś na zmiennej expression. Widzę wtedy podział na left => right, przedstawione jest pewnego rodzaju drzewo i na "liściach" tego drzewa mogę zobaczyć interesujące mnie wiadomości, czyli : nazwa zmiennej, jej wartość, oraz typ zmiennej. Jednak czy jest jakaś możliwość dobrania się do tego z kodu ?

Mogę napisać parser ze stringa, ale to i nie będzie za wydaje i wg mnie nie będzie to najlepsze rozwiązanie.

0

tak,mozna. dokladnie po to sa expression<> ;)

dostales argument expression<>, ale jest to jest tylko typ bazowy.
zrzutuj go na LambdaExpression czy czym on tam jest naprawde, i zobaczysz wtedy, ze udostepnia on wiecej pol skladowych.

np. binary expression ma property Left i Right i operator, odpowiadajace lewemu i prawemu poddrzewu, i wezlowi.
np. invocation expression bedzie mialo methodinfo oraz liste parametrow
np. lambdaexpression bedzie mialo poddrzewo wyrazen oraz liste parametrow

tylko.. zeby przez to sie przeryc i wydobyc to co chcesz, to nie zawsze tak latwo. expressions sa dosc szeroko rozbudowane w sensie ilosci roznych typow mozliwych wezlow, i najlepiej zabierz sie za lekture o "wzorcu" Visitor :)
http://blogs.msdn.com/b/mattwar/archive/2007/07/31/linq-building-an-iqueryable-provider-part-ii.aspx

to powinno Ci wystarczyc do wyciagniecia takich informacji jak napisales. podejrzewam, ze jednak chcesz osiagnac cos wiecej i tylko podales wstepniak do wlasciwego problemu.

inne ciekawe linki ktore mi sie motaja pod reka to:
http://blogs.msdn.com/b/mattwar/archive/2008/11/18/linq-links.aspx "LINQ: Building an IQueryable provider series"
http://www.jasonbock.net/jb/Default.aspx?blog=entry.0502a8570a5e4a9ab5c54813d805dfd7 Mutating Expressions 05.14.2010
http://blog.magenic.com/blogs/aarone/archive/2007/05/24/Announcing-MetaLinq-_2D00_-Linq-to-Expressions.aspx
http://blogs.msdn.com/b/jomo_fisher/archive/2007/05/07/visitor-revisitted-linq-function-composablity-and-chain-of-responsibility.aspx
http://blogs.msdn.com/b/jomo_fisher/archive/2007/05/23/dealing-with-linq-s-immutable-expression-trees.aspx
http://stackoverflow.com/questions/606104/how-to-create-linq-expression-tree-with-anonymous-type-in-it
warto zajrzec, zwlaszcza jezeli masz ochote modyfikowac wyrazenia expression, nie takie to latwe bez przeczytania ichże.

1 użytkowników online, w tym zalogowanych: 0, gości: 1