IEnumerable接口
公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代。也就是说:实现了此接口的object,就可以直接使用foreach遍历此object;
IQueryable 接口
它继承 IEnumerable 接口,而因为.net版本加入Linq和IQueryable后,使得IEnumerable不再那么单调,变得更加强大和丰富。
为了区别两个接口,我们通过一个实际的例子来解释一下。
今天实际操作了一把IQueryable与IEnumberable的区别,
#region 用户管理列表
/// <summary>
/// 用户管理列表
/// </summary>
/// <returns></returns>
public ActionResult List()
{
//IQueryable
IQueryable<m_user> userlistIQue = (from u in myteref.m_user
orderby u.id
select u).Skip<m_user>(1).Take<m_user>(2);
//IEnumerable
IEnumerable<m_user> userlistIEnu = (from u in myteref.m_user
orderby u.id
select u).AsEnumerable<m_user>().Skip<m_user>(1).Take<m_user>(2);
int i = 0;
foreach (var c in userlistIQue)
{
i++;
}
Console.WriteLine(i);
foreach (var c in userlistIEnu)
{
i++;
}
Console.WriteLine(i);
return View();
}
#endregion
IQueryable的,会先帮你执行Skip<m_user>(1).Take<m_user>(2),生成SQL:SELECT TOP 2 ....
IEnumerable ,则是查询出所有的数据,放到内存中来。
显然是第一个好。