Drzewa wyrażeń - kiedy się ich używa?

0

Przeczytałem sporo artykułów jak się tworzy drzewa wyrażeń, ale nigdzie nie znalazłem odpowiedzi po co, w jakim celu?

Bo co za różnica jak napiszę:

Expression<Func<int, int>> expressionTree = a => a * a;
var result = expressionTree.Compile()(4);

a jak napiszę:

Func<int, int> fun = a => a * a;
var result2 = fun(4);
2

Wyrażenia pozwalają Ci dynamicznie zbudować "kawałek kodu" na podstawie np. danych wprowadzonych od użytkownika.

1

Przykład z przed kilku dni: miałem kilka tabel z danymi, każda z nich zawierała sporo kolumn, użytkownik systemu mógł sortować po każdej z nich. Nazwa kolumny po której dane miały być sortowane była przekazywana w QueryString. Zamiast drabinki if-else, wykorzystałem trochę właśnie Expression do budowania dynamicznie keySelectorów, które leciały z zapytaniem do SQL przez EntityFramework.

Często również stosuje się Expression w różnego rodzaju konfiguracji na zasadzie FluentAPI, np:

 
context.Model<Person>().Column(x => x.Name).IsRequired();

Gdzie funkcja Column przyjmuje właśnie Expression zamiast stringa.

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