详解C# Lambda表达式的动态生成(1)(2)
动态构建C# Lambda表达式例子3 varints= new int []{1,2,3,4,5,6,7,8,9}; //varr= ints.Where(i=(i5i=7)||(i==3)); //要实现的表达式 //创建参数i varparameter= Expression.Parameter( typeof
动态构建C# Lambda表达式例子3
- var ints =
- new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- // var r =
- ints.Where(i => (i > 5 && i <= 7) || (i == 3));
- // 要实现的表达式
- // 创建参数 i
- var parameter =
- Expression.Parameter(typeof(int), "i");
- // 创建表达式 i > 5
- var con1 =
- Expression.Constant(5);
- var bin1 =
- Expression.GreaterThan(parameter, con1);
- // 创建表达式 i < 7
- var con2 =
- Expression.Constant(7);
- var bin2 =
- Expression.LessThanOrEqual(parameter, con2);
- // 创建表达式 i == 3
- var con3 =
- Expression.Constant(3);
- var bin3 =
- Expression.Equal(parameter, con3);
- // 组合 i > 5 && i <= 7
- var body =
- Expression.And(bin1, bin2);
- // 组合 ( i > 5 && i <= 7) OR (i == 3)
- body = Expression.Or(body, bin3);
- var lambda =
- Expression.Lambda<Func<int, bool>>
- (body, parameter);
- var _r = ints.Where(lambda.Compile());
我们继续看几个常见的例子。
动态构建C# Lambda表达式例子4
- var ints =
- new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- //var r = ints.Select(i => i % 2 == 0 ? i : 0);
- // 要实现的表达式
- // 创建参数 i
- var parameter =
- Expression.Parameter(typeof(int), "i");
- // 创建表达式 i % 2
- var con1 =
- Expression.Constant(2);
- var bin1 =
- Expression.Modulo(parameter, con1);
- // 创建表达式 (i % 2) == 0
- var con2 =
- Expression.Constant(0);
- var bin2 =
- Expression.Equal(bin1, con2);
- // 创建表达式 IIF(((i % 2) = 0), i, 0)
- var bin3 =
- Expression.Condition
- (bin2, parameter, Expression.Constant(0));
- var lambda =
- Expression.Lambda<Func<int, int>>(bin3, parameter);
- var _r = ints.Select(lambda.Compile());
动态构建C# Lambda表达式例子5
- var ints =
- new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- // Array.ForEach<int>(ints, i => Console.WriteLine(i));
- // 要实现的表达式
- // 创建参数i
- var parameter =
- Expression.Parameter(typeof(int), "i");
- // 获取 Console.WriteLine MethodInfo
- MethodInfo method =
- typeof(Console).GetMethod(
- "WriteLine", new Type[] { typeof(int) });
- // 创建表达式
- var call = Expression.Call(method, parameter);
- var lambda =
- Expression.Lambda<Action<int>>(call, parameter);
- Array.ForEach<int>(
- ints, lambda.Compile());
是该花点时间去好好研究一下 System.Linq.Expressions Namespace 了……
动态构建C# Lambda表达式的基本内容就向你介绍到这里,希望那个对你了解和掌握使用动态构建C# Lambda表达式有所帮助。
- 上一篇:数据库中LINQ执行存储过程的调用
- 下一篇:XML节点学习总结
收藏文章
精彩图集