IQueryable和IEnumerable的区别

  IQueryable<T>(IEnumerable<T>的一个子接口)。LINQ to SQL 提供程序实现 IQueryable<T> 接口,用于查询关系数据存储。C# 和 Visual Basic 编译器会将针对此类数据源的查询编译为代码,该代码在运行时将生成一个表达式目录树。然后,查询提供程序可以遍历表达式目录树数据结构,并将其转换为适合于数据源的查询语言。

  而IEnumerable<T>在编译的时候,会直接生产代码,不会生产表达式目录树。

        string[] arry = new string[] { "aa","bb","cc","dd"};
            arry.Where(s => s.Length == 2).OrderByDescending(s => s).Select(s => s);
            var b=arry.AsQueryable();
            b.Where(s => s.Length == 2).OrderByDescending(s => s).Select(s => s);

如果是IEnumerable<T>的话

Where<T>( this IEnumerable<T>, Func<T, bool> ),

OrderByDescending<TSource,TKey>( this IEnumerable<TSource>,Func<TSource,TKey> ),

Select<TSource,TResult>( this IEnumerable<TSource>, Func<TSource,TResult> )

而IQueryable<T>会在Func<>外面包装一层Expression<>,

Where<T>( this IEnumerable<T>,Expression<Func<T, bool>> ),

OrderByDescending<TSource,TKey>( this IEnumerable<TSource>,Expression<Func<TSource,TKey>>),

Select<TSource,TResult>( this IEnumerable<TSource>, Expression<Func<TSource,TResult>> )

你可能感兴趣的:(query)