首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

顺便借此机会解释一下,本人觉得LINQ的使用文章网上铺天盖地,实在没有什么必要更没有价值去写,网上的LINQ使用性的文章入门到复杂的应用实在是太多了,不管是什么级别的程序员都能找到适用的文章。...还有就是继承IEnumerable对象让我们自己的集合类型具备LINQ的强类型的查询能力。当然具体要看我们需求,技术角度看目前只有这两点可以扩展。...但是大部分情况下我们都是针对所有的IEnunerale类型进行扩展的,这样可以很好的结合Linq的链式编程。原理就这么多,根据具体项目需要适当的采纳。...3.3】.分段执行IQueryable的子方法(Queryable的扩展方法) 都知道Linq的查询是将一些关键字拼接起来的,行成连续的查询语义,这其中背后的原理文章上上下下也说过很多遍,我想也应该大致的了解了...其实这有点像是把大问题分解成多个小问题来解决,但是又不全是为了分解问题而这样设计,在链式查询很多关键字在不同的查询上下文中都是公用的,比如where可以用在查询,也可以用在更新、删除

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

    金三银四面试:C#.NET面试题中高级篇5-Linq和EF

    9.LINQ to Object和LINQ to SQL有何区别? 10.除了EF,列举出你知道的ORM框架? 11.在哪些类型额项目中你会选择EF? 为什么?...提升数据库拿数据的速度,可以参考以下几种方法: 1).在数据库的表定义合适的索引和键 2).只获得你需要的列(使用ViewModel或者改进查询)和行(使用IQueryable)...LINQ to Object的数据源总是实现IEnumerable(所以不如叫做LINQ to IEnumerable),相对的,LINQ to SQL的数据源总是实现IQueryable并使用Queryable...如果像一些互联网项目中,对性能要求精度很高!可以另外做技术选型,选择原生ADO.NET。 12.请说明EF映射实体对象的几种状态? Detached:该实体未由上下文跟踪。...Deleted:实体将由上下文跟踪并存在于数据库,但是已被标记为在下次调用 SaveChanges 时数据库删除

    4.1K30

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

    LINQ to SQL可以将查询表达式转换为SQL语句,然后在数据库执行。相比LINQ to Object,则是将查询表达式直接转化为Enumerable的一系列方法,最终在C#内部执行。...LINQ to Object的数据源总是实现IEnumerable(所以不如叫做LINQ to IEnumerable),相对的,LINQ to SQL的数据源总是实现IQueryable<...(只有第一次才需要),删除记录,并插入两行新纪录的工作。...也就是说数据已经数据库获取到了内存,在内存中进行过滤和排序操作。 当数据源不在本地时,因为IEnumerable查询必须在本地执行,所以执行查询前我们必须把所有的数据加载到本地。...将程序员对SQL语句的拼接(尤其是insert)解放出来,它既容易错,又很难发现错误。现在插入的对象都是强类型的,就犹如插入一个List一样。

    1.7K10

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

    语言集成查询(Language-Integrated Query),简称LINQ,.NETLINQ体系如下图所示: ?...LINQ表达式的查询关键字 表格的英文没什么难点,就不翻译了 :) 关键字 描述 from Specifies a data source and a range variable (similar...两个接口 在LINQ,一个查询表达式被编译为表达式树或者委托,查询结果为IEnumerable类型则被编译为委托,查询结果是IQueryableIQueryable类型则被编译为表达式树...System.Linq.IQueryable 在执行查询操作时,IQueryable先在服务器端进行过滤操作(如果有的话),然后再将数据放到本地内存。...IQueryable适合使用对进程外(如数据库)的数据进行查询操作,如:LINQ to Entities。

    2.7K30

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

    前言 -为什么需要扩展 Linq 方法 Linq 在 .net 中使用是比较多的,而微软开发的 linq 相关函数无法满足实际项目开发的需求,我们需要自己来扩展一些方法。...c# 扩展方法 在 Asp.Net Core 开发或者其他的后端开发中都会有一个需求(尤其对于台或者后台管理),那就是展示数据列表;当然不是普普通通的数据列表展示,而是需要进行排序、分页、查询关键字来获取列表...出来属性进行查询的,但是实际使用,从前端传递过来的一般都是字符串 "Name",而在后端进行查询时,以目前方式是无法将属性的key写到where函数,也就无法执行查询通过"Name"来过滤数据;如果通过...if...else 来判断,那么将会是一个非常大的工程量,每个实体上面有 m 个属性,而一个项目中有 n 张表,那么几乎需要 m*n个判断进行处理,非常的差劲,不利于后续扩展和维护。..., IQueryable>(query, resultQuery); } } 这样通过 linq 就可以直接调用 UseCoditionFind 然后获取返回的 query,然后再

    1.7K10

    .NET面试题系列 - LINQ:性能

    当然如果数据来自远端,你还可以选择IQueryable,它不会把资料一股脑拉下来,而是做完所有的筛选之后,才ToList,把资料远端下载下来。...这篇文章的第三点,就是一个典型的SELECT N+1问题。在代码,选择了前100个score(一条SQL),然后对所有score进行遍历,表Student获得Name的值(100条SQL)。...(当然还有很多其他工具,或者最基本的就是用SQL Profiler不过比较麻烦) LINQ to SQL的性能问题 提升数据库拿数据的速度,可以参考以下几种方法: 在数据库的表定义合适的索引和键...XML等,EF没有对应的功能 你的项目对性能要求达到了非常苛刻的程度,导致EF的一些性能可以接受的方法在你这里变成了不能接受。...避免过早的ToList,返回IEnumerable/ IQueryable类型的巨大规模的数据。 是否需要重复极其多次运行相同的LINQ语句?考虑使用foreach或者PLINQ来优化性能。

    2.6K40

    C#规范整理·集合和Linq

    当我们觉得在集合插入和删除数据很慢时,就可以考虑使用链表。...13.区别LINQ查询的IEnumerable<T>和IQueryable<T># LINQ查询方法一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了...我们知道,LINQ查询功能上来讲实际上可分为三类:LINQ to OBJECTS、LINQ to SQL、LINQ to XML(本建议不讨论)。...LINQ to SQL引擎最终会将表达式树转化成为相应的SQL语句,然后在数据库执行。 那么,到底什么时候使用IQueryable<T>,什么时候使用IEnumerable<T>呢?...在使用IQueryable<T>查询的时候,如果使用自定义的方法,则会抛出异常。 13.使用LINQ取代集合的比较器和迭代器# LINQ提供了类似于SQL的语法来实现遍历、筛选与投影集合的功能。

    20230

    了解LINQ

    本文主要的是泛谈LINQ是啥?以及常见的用法大纲如下: LINQ的那些根基 LINQ的一些基本用法 LINQ的根基 IEnumerable和IEnumerator 为啥能够被foreach?...的对象就是一个实现了IEnumerable的可被枚举的集合 LINQ的基本用法 扩展方法在LINQ的应用:LINQ的流式语法 LINQ的方法一般都是通过扩展方法了扩展的,就如最常用的几个,Where,Any...的延迟执行:IQueryable 首先我们来看看IQueryable的接口定义: public interface IQueryable : IEnumerable {...].Where(t => t.Contains("CAT")) ExpressionType:System.Linq.Expressions.MethodCallExpression2 CAT 我们输出可以证明...里的那个表达式树属性Expression,而像LINQ To Sql或者是EFCore等需要IQueryable这种解释型的就是去实现了IQueryProvider里面的方法 参考 《C#7.0核心技术指南

    89620

    编写高质量代码改善C#程序的157个建议

    本文主要学习记录以下内容:   建议29、区别LINQ查询的IEnumerable和IQueryable   建议30、使用LINQ取代集合的比较器和迭代器   建议31、在LINQ查询避免不必要的迭代...建议29、区别LINQ查询的IEnumerable和IQueryable   LINQ查询方法一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:     Enumerable...LINQ查询功能上来讲实际上可以分为三类:LINQ to OBJECTS、LINQ to  SQL、LINQ to XML。...LINQ to SQL引擎最终会将表达式树转化成为相应的SQL语句,然后在数据库执行。   那么到底什么时候使用IQueryable,什么时候使用IEnumerable呢?...在LINQ to SQL的查询,要尽量始终使用IQueryable

    95550

    EF Core关系配置

    内存占用小、 DB连接占用时间长; 2、DataTable:把所有数据都一次性数据库服务器都加载到客户端内存。内存占用大,节省DB连接。...未改变(Unchanged):DbContext正在跟踪此实体,该实体存在于数据库,其属性值和数据库读取到的值一致,未发生改变。...已删除(Deleted):DbContext正在跟踪此实体,并存在于数据库,但在下次调用 SaveChanges 时要从数据库删除对应数据。...”的实体,SaveChanges() 数据库删除; 查看实体的状态: 使用DbContext的Entry()方法来获得实体在EF Core的跟踪信息对象EntityEntry。...System.Linq.Dynamic.Core nuget安装:System.Linq.Dynamic.Core 1、System.Linq.Dynamic.Core 2、使用字符串格式的语法来进行数据操作

    11610

    Entity Framework 的一些性能建议

    如果你只是想根据条件选择其中一些数据,而非全部的话,那ToList()以后再筛选,就是内存里执行了,并不是把你的条件转换成sql的where语句去执行。.... // 建立查询,但不执行 var result = query.ToList(); // 立即执行查询 所以,你应当尽量避免ToList()后的结果再去查找自己想要的元素。 ?...IQueryable, IEnumerable 在这两个接口的选择上,我偏向使用IQueryable。...但这时,很不幸的是,where语句中的条件并不是转换为native sql去执行的,它是在内存筛选的。这是一个比较阴的性能问题。...所以文章一开始我就建议大家多用SQL Profiler看看自己的LINQ是怎么执行的。 如果把返回类型换成IQueryable,那么你的where语句就可以转化为SQL执行。

    1.7K30

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

    那么在LINQ来说,我们无法通过一个方法多次调用来产生我们想要的表达式树,一个Where查询表达式扩展方法可能不仅仅是被LINQ查询表达式所使用,还有可能被ORM的入口方法所使用,比如Update更新的时候就需要...当然LINQ只有Linq to Object才会出现重复的使用一到两个方法来完成功能,像Linq to Entity 几乎不会出现这种情况。...IQueryable接口貌似是一个对象,但是它们都属于一个完整的IQueryable的一员。N层对象体现在哪里?...在LINQ的查询表达式与查询方法其实是一一对应的,扩展方法是纵向的概念,而LINQ查询表达式是横向的,其实两者属于对应关系。...ORM一直是我们比较喜欢去写的框架,这里就使用自定义的IQueryable来查询相应的对象实体。首先我们需要继承IQueryable接口来让LINQ能查询我们自己的数据上下文。

    1.1K30

    .NET深入解析LINQ框架(三:LINQ优雅的前奏)

    其实可以的,有个很隐蔽的窍门隐藏在IQueryable扩展方法对象Queryable,也就是AsQueryable方法,它返回的是一个实现了IQueryable接口的EnumerableQuery...现在的需求是界面上接受一个Name值的输入,LINQ的查询只需要直接写就行了。...("请输入要查询人的名称:"); 6 ConstantExpression name = Expression.Constant(Console.ReadLine());//用户输入流读取值...该例子的重点是如何动态构建逻辑,根据不同的项目要求完全可以将类似的功能封装起来供以后重复使用。...后面我们就来详细的讲解如何扩展IQueryable、IQueryableProvider两个重量级接口,只有他们两个才能让我们和LINQ对话,这两个接口还是很神秘的。

    1.6K20
    领券