你的位置:首页 > 软件开发 > ASP.net > IEnumerable和IQueryable的区别以及背后的ExpressionTree表达式树

IEnumerable和IQueryable的区别以及背后的ExpressionTree表达式树

发布时间:2015-04-01 16:00:38
关于IEnumerable和IQueryable的区别,这事还要从泛型委托Func<T>说起。来看一个简单的泛型委托例子: class Program { static void Main(string[] args) { Func& ...

IEnumerable和IQueryable的区别以及背后的ExpressionTree表达式树

关于IEnumerable和IQueryable的区别,这事还要从泛型委托Func<T>说起。来看一个简单的泛型委托例子:

 

  class Program
  {
    static void Main(get='_blank'>string[] args)
    {
      Func<int, bool> f = i => i > 5;
      Console.WriteLine(f(3));
      Console.WriteLine(f(10));
      Console.ReadKey();
    }
  }

 

Func<T>是"语法糖",实际上,编译器在内部会生成一个临时方法,再执行该方法。等同于如下:

 

  class Program
  {
    static void Main(string[] args)
    {
      Func<int, bool> f = DoSth;
      Console.WriteLine(f(3));
      Console.ReadKey();
    }
    static bool DoSth(int i)
    {
      return i > 5;
    }
  }

 

以上,.NET内部运作的路径是:编写C#代码→编译器编译成中间语言IL→运行时JIT编译成本地语言执行

 

■ 使用表达式树 Expression Tree

 

可是,有时候我们希望在运行时执行代码,该怎么办呢?

 

.NET为我们提供了Expression Tree,允许我们在运行时执行代码。

 

比如以上Func<int, bool> f = i => i > 5;这个表达式,Expression Tree这样理解这个表达式:

 

○ f是Expression<Func<int, bool>>类型,级Expression<TDelegate>类型

原标题:IEnumerable和IQueryable的区别以及背后的ExpressionTree表达式树

关键词:ie

ie
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。