面试必备:IEnumerable和IQueryable之间的区别?

    IEnumerable和IQueryable的知识点是面试中常考之一,这不小编的同事面试又遇到了,问这个挂了。这个两个关键词在开发中非常常见,但是普通程序员要说出它们的的理论知识还是有一定的难度。本文将介绍IEnumerable和IQueryable之间的区别,希望对大家的面试有所帮助。

1、简介

C#3.0 推出了LINQ(语言集成查询)。它是一种在 C# 语言中集成的查询语言,用于查询各种数据源,包括集合、关系数据库、XML 文档等。

当你使用LINQ时,您会发现返回值IEnumerable和IQueryable,两者都对列表数据进行查询等操作,那么它们的关系是什么?

我们首先创建一个方法,返回IEnumerable类型,然后F12查看一下。可以看出接口 IEnumerable<>(命名空间System.Collections.Generic) 继承自 IEnumerable(System.Collections),并且具有 GetEnumerator() 方法。如下图:

fba986e269e8879395e69ceb879d4bab.png

同样IQueryable也F12查看一下。它继承自IEnumerable。

12f08f12fc51daab38dfd00a81d7e074.png

查看源码:

82d524f94aa9939d695d409a247a765b.png

源码路径:runtime/src/libraries/System.Linq.Expressions/src/System/Linq

/IQueryable.cs。

gtihub地址:github.com/dotnet/runtime/

★ 由上可以看出IEnumerable和IQueryable是继承的关系。

2、IEnumerable 和 IQueryable的区别

IEnumerable 和 IQueryable 都是 .NET 框架中提供的接口,用于表示可枚举的集合。但是,它们之间存在一些关键的区别。

IEnumerable 是所有可枚举对象的基接口,包括数组、集合、字符串等。它定义了基本的枚举操作,例如 GetEnumerator() 和 Count()。

IQueryable 是 IEnumerable 的扩展接口,它提供了 LINQ 查询的支持。IQueryable 中的查询操作会生成一个表达式树,该表达式树在执行时会转换为 SQL 查询。

假设数据库中有 1000 行。如果要使用 IEnumerable 创建这些行,.NET 会将所有行读取到内存中。它的写入、排序和过滤直接在内存中操作,因为所有信息都存在于内存中。使用 IQueryable 可以用 WHERE、SELECT、ORDER BY等对数据进行操作,并在数据端执行查询。

使用场景:

IEnumerable 适用于对内存中数据进行查询。

IQueryable 适用于对数据库、XML 文档等外部数据源进行查询。

那么什么时候选择使用IEnumerable 和 IQueryable呢?

在大多数情况下,我们应该使用 IEnumerable 来查询内存中的数据。如果需要查询外部数据源,例如数据库或 XML 文档,则应该使用 IQueryable。另外IQueryable可以使用强大的linq查询语法;可以执行延迟查询并将查询结果缓存起来,从而提高性能。大家感兴趣可以用代码分别运行两者,对比一下。

结语

本文介绍了IEnumerable 和 IQueryable的区别,希望对大家面试有所帮助。大家对IEnumerable 和 IQueryable有什么看法,欢迎留言讨论或吐槽。

版权声明:本文来源于网友收集或网友供稿,仅供学习交流之用,如果有侵权,请转告小编或者留言,本公众号立即删除。

-技术群:添加小编微信并备注进群
小编微信:mm1552923   公众号:dotNet编程大全
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值