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>> )