**
IQueryable和IEnumerable的区别
public static IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate);
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
**
1.IQueryable接口是继承自IEnumerable的接口的.
2.IQueryable 参数Expression是一个表达式,会存储拼接表达式树,直到在运行期最终执行。优势在有表达树,如果是对数据的过滤或者排序等,这些条件会先缓存到表达式树中,真正对数据进行操作的时候才会去查数据库执行操作,比如执行ToList方法时才会去真正调用迭代器GetEnumerator() 取值,延时加载。
3.IEnumerable与IQueryable不同,参数接收的是一个谓词表达式,也就是一个委托,委托一旦调用,就立即执行,将执行结果保存在内存中。事先把所有数据存到内存中,当要对数据进行排序,筛选,分页时直接从内存中进行操作.
**
IQueryable,IEnumerable和List的转换
**
1.IQueryable和IEnumerable类型的数据可以直接.Tolist()转换为List;
2.如果要由List转换为IQueryable可直接.AsQueryable();
List ListUser = new List();
var queryable = ListUser.AsQueryable();
由List转IEnumerable可直接.AsEnumerable();
List ListUser = new List();
var queryable = ListUser.AsEnumerable();
3.IQueryable和IEnumerable相互转换;可先转为List再由List转换成对应类型.