您的位置:首页 > 产品设计 > UI/UE

IQueryable<T>和IEnumerable<T>的区别

2014-01-07 16:31 344 查看


IQueryable<T>和IEnumerable<T>的区别

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

/article/6336508.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: