用LINQPad来测试 IEnumerable & IQueryable的主要区别
1.IEnumberable
IEnumerable<Customers> customers =Customers.Where(q => q.CompanyName.StartsWith("A")); customers = customers.Take<Customers>(10); customers.Dump();
转成SQL:
SELECT [Extent1].[CustomerID] AS [CustomerID], [Extent1].[CompanyName] AS [CompanyName], [Extent1].[ContactName] AS [ContactName], [Extent1].[ContactTitle] AS [ContactTitle], [Extent1].[Address] AS [Address], [Extent1].[City] AS [City], [Extent1].[Region] AS [Region], [Extent1].[PostalCode] AS [PostalCode], [Extent1].[Country] AS [Country], [Extent1].[Phone] AS [Phone], [Extent1].[Fax] AS [Fax] FROM [dbo].[Customers] AS [Extent1] WHERE [Extent1].[CompanyName] LIKE N'A%'
2.IQueryable
IQueryable<Customers> customers =Customers.Where(q => q.CompanyName.StartsWith("A")); customers = customers.Take<Customers>(10); customers.Dump();
转成SQL:
SELECT TOP (10) [Extent1].[CustomerID] AS [CustomerID], [Extent1].[CompanyName] AS [CompanyName], [Extent1].[ContactName] AS [ContactName], [Extent1].[ContactTitle] AS [ContactTitle], [Extent1].[Address] AS [Address], [Extent1].[City] AS [City], [Extent1].[Region] AS [Region], [Extent1].[PostalCode] AS [PostalCode], [Extent1].[Country] AS [Country], [Extent1].[Phone] AS [Phone], [Extent1].[Fax] AS [Fax] FROM [dbo].[Customers] AS [Extent1] WHERE [Extent1].[CompanyName] LIKE N'A%'
3.两者查询出的数据都一样,如下:(但是用LINQPAD测试,IEnumerable永远都比IQueryable快?实际是哪种更快呢?)
4.总结两者的主要区别是:
1)IEnumerable是把所有数据加载到内存中,再调用SKIP,TAKE等扩展方法;
2)IQueryable是把SKIP,TAKE这些全部翻译成T-SQL语句再向SQL服务器发送命令,它并不是把所有数据都加载到内存里才进行条件过滤。
5.如何恰当使用IEumerable&IQueryable
1)IEnumerable更适合查询那些已经加载到内存中的数据,譬如List,Array等
2)IQueryable更适合查询那些在远程上的数据,譬如读取数据库中的数据,从服务中读取数据。
本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/keeplearningandsharing/p/16573182.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2021-08-10 C# 数组与字符串的转换