Expression可以用于组成lambda表达式,我的疑问是我如何用Expression来组成一个三目的表达式?
比如
var a = a.c1 == 1 ? a : null;
这句简单的三目,我如何用Expression来组装lambda?
有高手来支援么?另外还有个问题,我如何用Expression来实现left join?
比如
var a = a.c1 == 1 ? a : null;
这句简单的三目,我如何用Expression来组装lambda?
有高手来支援么?另外还有个问题,我如何用Expression来实现left join?
谢谢,这个我知道但是我问的是用Expression如何来组装。
我是想在runtime中自动的组装一个lamdba,而非hardcode
var leftOuterQuery2 =
from category in categories
join prod in products on category.ID equals prod.CategoryID into prodGroup
from item in prodGroup.DefaultIfEmpty()
select new { Name = item == null ? "Nothing!" : item.Name, CategoryID = category.ID }; Console.WriteLine("LeftOuterJoin2: {0} items in 1 group", leftOuterQuery2.Count());
具体请参考:http://msdn.microsoft.com/zh-cn/library/vstudio/bb311040(v=vs.110).aspx
Expression p11 = MemberExpression.Property(p1, "cont");
var args = new ParameterExpression[] { p1 };
Expression<Func<A, int>> l1 = Expression.Lambda<Func<A, int>>(p11, args);
这段代码组成的是 a1 => a1.cont 这个lamdba
我问的三目类似这个组成过程,如何来做呢?
Expression p11 = MemberExpression.Property(p1, "cont");
Expression Pconst = ConstantExpression.Constant(1, typeof(Int32));
Expression op1 = BinaryExpression.Equal(p11, Pconst);
var args = new ParameterExpression[] { p1 };
Expression<Func<A, bool>> l = Expression.Lambda<Func<A, bool>>(op1, args);
组成的是a1 => a1.cont == 1 这个lamdba
//Expression<Func<A, A>> f = a => a.cont >= 23 ? a : null;
var par = Expression.Parameter(typeof(A), "a");
var ex = Expression.Lambda(Expression.Condition(Expression.Equal(MemberExpression.Property(par, "cont"), Expression.Constant(23, typeof(int))), par, Expression.Constant(null, typeof(A))), par);
var s = (ex.Compile() as Func<A, A>)(new A() { cont = 2 });