首页
学习
活动
专区
圈层
工具
发布

.NET面试题系列 - LINQ to SQL与IQueryable

LINQ to SQL可以将查询表达式转换为SQL语句,然后在数据库中执行。相比LINQ to Object,则是将查询表达式直接转化为Enumerable的一系列方法,最终在C#内部执行。...将查询表达式转换为SQL语句并不保证一定可以成功。 IQueryable 理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列。...它令IQueryable和IEnumerable一样,拥有强大的查询能力。 AsQueryable方法将IEnumerable转换为IQueryable。...where lambda表达式转换为SQL,功能非常有限。...在LINQ to SQL中lambda表达式首先被转化为表达式树,然后再转换为SQL语句。 我们试图实现一个可以将where这个lambda表达式翻译为SQL语句的查询提供器。

2.2K10

C#内建接口:IQueryable

其主要用于 LINQ(Language Integrated Query)查询,它允许我们在编写类型安全的查询表达式时,将查询操作推迟到实际执行查询的时候,以便进行更有效的查询优化。...在 C# 中,常用的查询提供者是 Entity Framework(EF),它可以将 IQueryable 查询转换为适当的 SQL 查询语句,并与数据库进行交互以获取结果。...60 // 40 } } 在上面的示例中,我们首先创建了一个整数数组 numbers,然后通过 AsQueryable() 方法将其转换为...IQueryable 对象,针对这个查询对象,我们用 Where 方法筛选出偶数,再使用 Select 方法将每个偶数乘以 10取这样一个结果。...接下来,我们修改了 numbers 数组中的一个元素,将索引为 2 的元素由 3 修改为 6。 最后,我们通过 foreach 循环遍历查询结果,并将结果打印到控制台上。

81210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    IQueryable与IEnumberable的区别

    转自 http://www.cnblogs.com/fly_dragon/archive/2011/02/21/1959933.html IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代...也就是说:实现了此接口的object,就可以直接使用foreach遍历此object; IQueryable 接口 它继承 IEnumerable 接口,而因为.net版本加入Linq和IQueryable...第一种:直接返回 IQueryable类型的查询,如下图所示: ? 第二种:在用分页查询之前先将其转换成 IEnumerable实际执行的sql如下图所示: ?...总结 IQueryable接口与IEnumberable接口的区别: IEnumerable 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable... 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。

    85210

    .NET 2.0运行时的LINQ

    .: 没人提到LINQBridge是很奇怪的.这个小巧的项目是LINQ(IEnumerable,但没有IQueryable)及其依赖(Func,Action等)到.NET 2.0的后端.和: 如果您的项目在编译期间引用...请参见此处:.NET 2.0上的LINQ支持 创建一个新的控制台应用程 仅将System和System.Core保留为引用的程序集 为System.Core将Copy Local设置为true,因为它在...建立 将所有bin输出复制到仅安装.NET 2.0的计算机 跑 (需要.net 2.0 SP1,我不知道捆绑System.Core.dll是否违反了EULA) 重新分发System.Core.dll违反了...LINQ使用合成转换将查询转换为可执行代码.基本上,它将采用这样的代码: ? dim q = from x in xs where x > 2 select x*4; 并将其转换为如下代码: ?...扩展方法将表达式树作为参数,而不是lambdas.它们看起来像这样: ?

    1.3K10

    .NET中数据访问方式(一):LINQ

    IQueryable继承自IEnumerable,是个标记接口。...可查询类型无需额外操作即可进行LINQ操作,若数据源在内存中不以可查询类型的形式存在,那么LINQ提供程序必须要先将数据源转换为可查询类型,如LINQ to XML将XML文件转换为可查询的XElement...两个接口 在LINQ中,一个查询表达式被编译为表达式树或者委托,查询结果为IEnumerable类型则被编译为委托,查询结果是IQueryable或IQueryable类型则被编译为表达式树...System.Linq.IQueryable 在执行查询操作时,IQueryable先在服务器端进行过滤操作(如果有的话),然后再将数据放到本地内存中。...IQueryable适合使用对进程外(如数据库)的数据进行查询操作,如:LINQ to Entities。

    3.7K30

    规范模式:终结仓储臃肿的终极武器(C#实战)

    你的仓储类将缩减为一行:"应用规范"。 突然间,规范模式不再只是设计模式手册中的脚注,而成为了对抗仓储臃肿的秘密武器。... GetQuery( IQueryable input, Specification spec)...AppDbContext _db; public GatheringRepository(AppDbContext db) => _db = db; private IQueryable...为什么这很酷 优势 说明 单一职责 仓储=协调者;规范=查询定义 可重用性 将小规范组合成更大的规范 可测试性 隔离单元测试规范:提供假IQueryable并断言表达式树 灵活性 分页?添加到基类。...关键要点 • 规范模式集中查询逻辑,消除仓储重复 • 评估器将规范转换为IQueryable;仓储只需执行 • 具体规范=人类可读的意图(GatheringByNameSpec) • 扩展分页、缓存或软删除过滤器

    16610

    .NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)

    下面我们将重点分析Linq to Provider,这样我们才能真正的对LINQ进行高级应用。...IQueryable并非IEnumerable对象,无法实时的做出处理然后将结果返回给下一个方法接着执行。那么它如何将片段性的执行方法串成一个整的、完整的查询?...这幅图重点是IQueryable对象的连续操作,大致原理是每次执行扩展方法的时候都会构造一个新的IQueryable,本次的IQueryable对象将包含上次执行的表达式树,以此类推就形成了一颗庞大的表达式树...这是问题的重点,对扩展方法、链式编程不熟悉的朋友很难将source能串联到之前方法所返回的IQueryable对象上。...3.3】.分段执行IQueryable中的子方法(Queryable中的扩展方法) 都知道Linq的查询是将一些关键字拼接起来的,行成连续的查询语义,这其中背后的原理文章上上下下也说过很多遍,我想也应该大致的了解了

    2.1K11

    LINQ to SQL集成到应用程序中需考虑的一些问题

    1、LINQ to SQL集成到应用程序中需考虑的一个问题, 到底应该返回IQueryable还是IQueryable?..., IQueryable都没有任何问题. 3、需要一个动态排序功能, 这里List的局限性出来了, 传统的做法可能需要用一个dynamic参数来传递需要排序的列然后到SP当中来执行, 但我们已经不打算使用...SP了, 也没有动态sql语句, 所有的东西都是强类型的, 然后有LINQ to SQL在运行时来帮我们转换为T-SQL语句。...但是IQueryable不能跨assembly, 一旦跨了assembly的话, 你无法使用var来引用匿名类里面的property, 绑定到control是没有问题的, 但是客户端的动态查询却成了问题...那么选择IQueryable, 我们选择返回IQueryable给客户端, 分页/排序都没有任何问题.

    1.7K60

    Entity Framework快速入门--IQueryable与IEnumberable的区别

    也就是说:实现了此接口的object,就可以直接使用foreach遍历此object; IQueryable 接口 它继承 IEnumerable 接口,而因为.net版本加入Linq和IQueryable...using (SchoolDBEntities schoolEntities = new SchoolDBEntities()) { //查询的结果放入IQueryable...接口的集合中 IQueryable classesIQue = (from c in schoolEntities.T_Class...第一种:直接返回 IQueryable类型的查询,如下图所示: 第二种:在用分页查询之前先将其转换成 IEnumerable实际执行的sql如下图所示: 总结 IQueryable接口与IEnumberable...接口的区别:  IEnumerable 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable 是将Skip ,take 这些方法表达式翻译成

    74650

    LINQ鲜为人知的7个秘密:从表达式树到并行查询的深度探索

    IQueryable不存储数据,它存储的是"配方" 这可能是最关键也最容易被误解的概念。当你针对数据库编写LINQ查询时,通常操作的是IQueryable。...许多开发者将其视为内存中的IEnumerable,但二者有本质区别: • IEnumerable是数据流,你可以遍历它 • IQueryable是表达式树,它是查询的"配方"或蓝图 当你对IQueryable...只有当你调用ToList()、First()或Count()等物化方法时,LINQ提供程序(如Entity Framework)才会将整个"配方"转换为优化后的SQL查询并发送到数据库。...这就是为什么在IQueryable查询中使用本地C#方法会失败——SQL转换器根本不知道你的C#方法要做什么。

    18800

    Asp.Net Core 扩展 Linq,简化自定义

    出来属性进行查询的,但是实际使用中,从前端传递过来的一般都是字符串 "Name",而在后端进行查询时,以目前方式是无法将属性的key写到where函数中,也就无法执行查询通过"Name"来过滤数据;如果通过...PropertyName { get { // 因为前端传递的是小写字母开头的,但是在后端都是大写字母开头的,我们需要在获取时将首字母大写...(ToLambdaWhere(propertyName, content)); } public static IQueryable WhereList(this IQueryable...实际使用中可以直接使用上方的扩展方法,扩展方法做成后,只需要按照如下调用即可 public static void Test(){ var articleTags = new List(); // 将属性..., IQueryable> UseCoditionFind(this IQueryable source, CoditionEntity coditionEntity)

    2.2K10

    .NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)

    其实理解这些所谓的设计模型后将大大开阔我们的眼界,毕竟研究框架是要研究它的设计原理,它的存在必然是为了解决某一类问题,问题驱动它的设计模型。...想必没有人不了解递归的原理,对递归的使用也是很常见的,通过递归算法我们可以解决一下无法解决的大问题,通过将大问题分解成多个同样数据结构的小问题然后让计算机重复的去计算就行了。...最为常见的就是遍历树形结构的对象,如:XML,它的每个节点都是一样的对象,所以递归调用的方法也是同一个方法,只不过不断的调用将产生多个调用栈,最后在按照调用顺序的反向出栈就得出一个完整的数据结构。...IQueryable接口貌似是一个对象,但是它们都属于一个完整的IQueryable中的一员。N层对象体现在哪里?...这一节我将给出LINQ的核心的执行图,我们将很清楚的看见LINQ的最终表达式树的对象结构,它是如何构建一棵完整的树形结构的,IQueryable接口是怎么和IQueryProvider接口配合的,为什么

    1.5K30
    领券