用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更适合查询那些在远程上的数据,譬如读取数据库中的数据,从服务中读取数据。

posted @   katesharing  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2021-08-10 C# 数组与字符串的转换
点击右上角即可分享
微信分享提示