Linq主要分为 Linq to object 、Linq to XML 、Linq to sql(现在都用EF了)。
针对object和sql,微软分别设计了两套接口IEnumerable、IQueryable(其中IQueryable继承与IEnumerable), 针对LINQ to OBJECTS时,使用Enumerable中的扩展方法对本地集合进行排序和查询等操作,查询参数接受的是Func<>。Func<>叫做谓语表达式,相当于一个委托。针对LINQ to SQL时,则使用Queryable中的扩展方法,它接受的是Expression<>。Expression<>用于包装Func<>。LINQ to SQL最终会将表达式树转换成相应的SQL语句,然后在数据库中执行。
简单的说:本地数据源用IEnumerable<T>,远程数据源用IQueryable<T>
首先 linq分为立即查询和延时查询,比如求和、最大值等操作时,是立即执行,并返回结果,而如果只是结果集的话,只有在foreach的时候才会去真正的查询,如果永远不foreach,那么代码只是会编译,并不会去执行查询,这就是延迟查询。
那么IE与IQ的差别是:你连续写多条linq,IE会查询多次,而IQ会组装成一次。
另外附文很好的linq博文:http://www.cnblogs.com/liqingwen/p/5801249.html