Entity Framework中使用IEnumerable<T>、IQueryable<T>及IList<T>的区别
2024-10-16 15:14:09
1. IEnumerable<T>
IEnumerable<T> :对于在内存中集合上运行的方法,返回的可枚举对象将捕获传递到方法的参数。在枚举该对象时,将使用查询运算符的逻辑,并返回查询结果。
IEnumerable<T>在.Net2.0引入。
IEnumberable使用的是LINQ to Object方式,将AsEnumerable()时对应的所有记录先加载到内存,再在此基础上再执行后面的Query。
本地数据源用IEnumerable<T>,并且查询的逻辑可以直接用你所定义的方法的逻辑。
using (PortalContext context = new PortalContext())
{
// 延迟执行
IEnumerable<Category> expr = (from c in context.Categories
select c).AsEnumerable().Take(); foreach (var item in expr)
{
Console.WriteLine(item.CategoryName);
}
}
执行的SQL语句:
SELECT
[Extent1].[CategoryID] AS [CategoryID],
[Extent1].[CategoryName] AS [CategoryName]
FROM [dbo].[Category] AS [Extent1]
IEnumerable<T>是延时执行(Deferred Execution)。
2. IQueryable<T>
IQueryable <T> :不会实现任何查询行为,但会生成一个表示要执行的查询的表达式树。查询处理由源 IQueryable<T> 对象处理。
IQueryable <T>在.Net支持Linq引入。
远程数据源用IQueryable<T>,无法直接使用你所定义的方法的逻辑,必须先生成表达式树,查询由源对象处理。
using (PortalContext context = new PortalContext())
{
// 延迟执行
IQueryable<Category> expr = (from c in context.Categories
select c).Take(); foreach (var item in expr)
{
Console.WriteLine(item.CategoryName);
}
}
执行的SQL语句:
SELECT TOP (5)
[c].[CategoryID] AS [CategoryID],
[c].[CategoryName] AS [CategoryName]
FROM [dbo].[Category] AS [c]
以上实例中,IQueryable<T>查询使用了LINQ to Sql的处理方式,在远处数据库中查询数据。
IQueryable<T>是延时执行(Deferred Execution)。
3. IList<T>
IList是即时执行(Eager Execution)
using (PortalContext context = new PortalContext())
{
// 即时执行
IList<Category> expr = (from c in context.Categories
select c).Take().ToList();
}
执行的SQL语句:
SELECT TOP (5)
[c].[CategoryID] AS [CategoryID],
[c].[CategoryName] AS [CategoryName]
FROM [dbo].[Category] AS [c]
最新文章
- CSS样式之优先级
- SAP采购订单历史明细报表源代码(自己收藏)
- Vs程序自动获取windows7/vista系统管理员权限
- Dynamic CRM 2013学习笔记(十五)报表设计:报表入门、开发工具及注意事项
- ACE的包装器
- 《Programming WPF》翻译 第3章 3.内嵌控件
- 解决struts2配置文件没有提示的问题
- UVA 12545 Bits Equalizer
- (转)cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- xml 和json 数据格式及解析
- 如何添加“在这里打开PowerShell”到Windows中的上下文菜单
- [Swift]LeetCode950. 按递增顺序显示卡牌 | Reveal Cards In Increasing Order
- HDU 6114 Chess【逆元+组合数】(组合数模板题)
- Hibernate 和 MyBatis 的区别
- encodeURI、encodeURIComponent
- Win10系列:UWP界面布局基础12
- [UE4]游戏主循环
- javax.servlet不存在问题的解决
- 【转载】IntelliJ IDEA 2017常用快捷键
- Codeforces Round #350 (Div. 2) B
热门文章
- Ajax及跨域
- 哪种缓存效果高?开源一个简单的缓存组件j2cache
- 参考bootstrap中的popover.js的css画消息弹框
- 如何在网页中提取Email地址
- 为IEnumerable<;T>;添加RemoveAll<;IEnumerable<;T>;>;扩展方法--高性能篇
- 「译」JUnit 5 系列:条件测试
- cesium核心类Viewer简介
- Stack Overflow 排错翻译 - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder
- Storm介绍(一)
- Hyper-V上运行的Linux虚拟机验证是否安装了集成服务