龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C#开发 >

详解C# Lambda表达式的动态生成(1)(2)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
动态构建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

  1. var ints =   
  2. new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };  
  3. // var r =   
  4. ints.Where(i => (i > 5 && i <= 7) || (i == 3));   
  5. // 要实现的表达式  
  6.  
  7. // 创建参数 i  
  8. var parameter =   
  9. Expression.Parameter(typeof(int), "i");  
  10.  
  11. // 创建表达式 i > 5  
  12. var con1 =   
  13. Expression.Constant(5);  
  14. var bin1 =   
  15. Expression.GreaterThan(parameter, con1);  
  16.  
  17. // 创建表达式 i < 7  
  18. var con2 =   
  19. Expression.Constant(7);  
  20. var bin2 =   
  21. Expression.LessThanOrEqual(parameter, con2);  
  22.  
  23. // 创建表达式 i == 3  
  24. var con3 =   
  25. Expression.Constant(3);  
  26. var bin3 =   
  27. Expression.Equal(parameter, con3);  
  28.  
  29. // 组合 i > 5 && i <= 7  
  30. var body =   
  31. Expression.And(bin1, bin2);  
  32.  
  33. // 组合 ( i > 5 && i <= 7) OR (i == 3)  
  34. body = Expression.Or(body, bin3);  
  35.  
  36. var lambda =   
  37. Expression.Lambda<Func<intbool>>  
  38. (body, parameter);  
  39. var _r = ints.Where(lambda.Compile());  

我们继续看几个常见的例子。

动态构建C# Lambda表达式例子4

  1. var ints =   
  2. new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };  
  3. //var r = ints.Select(i => i % 2 == 0 ? i : 0);   
  4. // 要实现的表达式  
  5.  
  6. // 创建参数 i  
  7. var parameter =   
  8. Expression.Parameter(typeof(int), "i");  
  9.  
  10. // 创建表达式 i % 2  
  11. var con1 =   
  12. Expression.Constant(2);  
  13. var bin1 =   
  14. Expression.Modulo(parameter, con1);  
  15.  
  16. // 创建表达式 (i % 2) == 0  
  17. var con2 =   
  18. Expression.Constant(0);  
  19. var bin2 =   
  20. Expression.Equal(bin1, con2);  
  21.  
  22. // 创建表达式 IIF(((i % 2) = 0), i, 0)  
  23. var bin3 =   
  24. Expression.Condition  
  25. (bin2, parameter, Expression.Constant(0));  
  26.  
  27. var lambda =   
  28. Expression.Lambda<Func<intint>>(bin3, parameter);  
  29. var _r = ints.Select(lambda.Compile());  

动态构建C# Lambda表达式例子5

  1. var ints =   
  2. new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };  
  3. // Array.ForEach<int>(ints, i => Console.WriteLine(i));  
  4.  // 要实现的表达式  
  5.  
  6. // 创建参数i  
  7. var parameter =   
  8. Expression.Parameter(typeof(int), "i");  
  9.  
  10. // 获取 Console.WriteLine MethodInfo  
  11. MethodInfo method =   
  12. typeof(Console).GetMethod(  
  13. "WriteLine"new Type[] { typeof(int) });  
  14.  
  15. // 创建表达式   
  16. var call = Expression.Call(method, parameter);  
  17.  
  18. var lambda =   
  19. Expression.Lambda<Action<int>>(call, parameter);  
  20. Array.ForEach<int>(  
  21. ints, lambda.Compile());  

是该花点时间去好好研究一下 System.Linq.Expressions Namespace 了……

动态构建C# Lambda表达式的基本内容就向你介绍到这里,希望那个对你了解和掌握使用动态构建C# Lambda表达式有所帮助。


精彩图集

赞助商链接