IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
makis824
Člen
Avatar
makis824:27.8.2014 12:22

Zdravim,

pokusam sa dynamicky vytvorit lambda-expression. Ako priklad som pouzil zdroj z MSDN - rozdiel je v tom, ze ja sa pokusam ako parameter vkladat objekt; priklad pada na 'Object does not match target type.' .

Nie je mi jasny ten 'target type' - je nutne pretypovat pParam ?

// dynamic lambda: p => p.age > 5
ParameterExpression pParam = Expression.Parameter(typeof(Person), "p");
ConstantExpression nConst1 = Expression.Constant(30, typeof(int));
PropertyInfo pInfo = typeof(Person).GetProperty("age");


Expression<Func<Person, bool>> lmb = Expression.Lambda<Func<Person, bool>>(Expression
    .GreaterThan(
        Expression.Constant((int)pInfo.GetValue(pParam, null)), // !! Object does not match target type.
        Expression.Constant(5)), new ParameterExpression[] { pParam });

MSDN Link

http://msdn.microsoft.com/…b397951.aspx?…

Za pomoc vopred dakujem..

 
Odpovědět
27.8.2014 12:22
Avatar
makis824
Člen
Avatar
Odpovídá na makis824
makis824:27.8.2014 13:48
IList<Person> ps = new List<Person> {
    new Person { name = "a", age = 20 },
    new Person { name = "b", age = 30 },
    new Person { name = "c", age = 40 }
};

// dynamic lambda: p => p.age > 20
var personParam = Expression.Parameter(typeof(Person), "p");
var numConst = Expression.Constant(20, typeof(int));
var age = Expression.Property(personParam, "age");

Expression<Func<Person, bool>> lmb = Expression.Lambda<Func<Person, bool>>(
    Expression.GreaterThan(age, numConst),
    personParam);

foreach (Person p in ps.Where(lmb.Compile()))
    Console.WriteLine(p.name);

Console.ReadKey();

..vid: http://stackoverflow.com/…here-example

 
Nahoru Odpovědět
27.8.2014 13:48
Avatar
sadlomaslox25:27.8.2014 21:21

pro slozitejsi vyrazy doporucuju pouzit nejakou knihovnu. osobne jich mam vyzkousenych asi 8 v jednom benchmarku a relativne nejlip vykonna a intuitivni me vysla https://github.com/…amicExpresso

 
Nahoru Odpovědět
27.8.2014 21:21
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.