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

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

我们只需要枚举同一序列一次,之后将结果储存为一个泛型集合即可。 例如我们的序列带有随机数: ? 此时我们会遍历序列四次。但每次序列都会不同。例如如果我们呼叫Sum方法四次,则可能会出现4个不同的和。...当我们调用LINQ的某些方法时,我们缓存了整个序列,而这可能是不必要的。我们根本不需要将整个序列留在内存中,只需要获得最后一个成员就可以了。...所以在使用ORM时,如果它用到了IQueryable,请将你的查询也写成表达式而不是委托的形式。...只获得你需要的列(使用ViewModel或者改进你的查询)和行(使用IQueryable) 尽可能使用一条查询而不是多条 只为了展示数据,而不进行后续修改时,可以使用AsNoTracking。...例如EF使用了反射,但如果你的ORM只用于你开发的软件,所有的情况你都可以事先预计,那你也可以不用反射 而大部分ORM开发出来的目标仅仅是: 令查询语法更加接近SQL 加入了若干语法糖或代码生成快捷方式

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

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

    使用Code First模式进行EF开发时开发人员只需要编写对应的数据类(其实就是领域模型的实现过程),然后自动生成数据库。...提升从数据库中拿数据的速度,可以参考以下几种方法: 1).在数据库中的表中定义合适的索引和键 2).只获得你需要的列(使用ViewModel或者改进查询)和行(使用IQueryable)...LINQPad工具是一个很好的LINQ查询可视化工具。它由Threading in C#和C# in a Nutshell的作者Albahari编写,完全免费。...LINQ to SQL可以将查询表达式转换为SQL语句,然后在数据库中执行。相比LINQ to Object,则是将查询表达式直接转化为Enumerable的一系列方法,最终在C#内部执行。...LINQ to Object的数据源总是实现IEnumerable(所以不如叫做LINQ to IEnumerable),相对的,LINQ to SQL的数据源总是实现IQueryable并使用Queryable

    5.8K30

    .NET 2.0运行时的LINQ

    启用LINQ的应用程序是否可以在仅安装了.NET 2.0运行时的计算机上运行? 从理论上讲,LINQ只不过是语法糖,而得到的IL代码应该与.NET 2.0中的代码相同.....: 没人提到LINQBridge是很奇怪的.这个小巧的项目是LINQ(IEnumerable,但没有IQueryable)及其依赖(Func,Action等)到.NET 2.0的后端.和: 如果您的项目在编译期间引用...LINQBridge,那么它将绑定到LINQBridge的查询运算符; 如果它在编译期间引用System.Core,那么它将绑定到Framework 3.5的查询运算符. +1我经常使用它.注意:这是LINQ....NET 2.0中不存在 在Main方法中使用LINQ查询.例如下面的那个....但是,您必须实现一些自己的LINQ方法. LINQ使用合成转换将查询转换为可执行代码.基本上,它将采用这样的代码: ?

    1.3K10

    解决Entity Framework查询匿名对象后的跨域访问的一种方式

    在Entity Framework中,可以使用lambda表达式进行对数据的查询,而且可以将查询结果直接映射为对象或者对象列表,这极大的提高的开发速度,并且使数据层的数据更加方便处理和传递。...但是很多时候,我们不需要把整个表的字段都查出来,如果我们直接把整个数据实体查询出来,就极大的影响了性能,所以我们需要通过查询匿名对象或者已经定义的方式,对数据库进行查询; 1.实例使用的数据实体类: public...假设我们需要现实一个分类目录,我们只需要Id和Name两个字段,我们可以建立一个新的CategoryView public class CategoryView { public int Id...Id = c.Id, Name = c.Name }; 这样,可以在将方法返回值设置为IQueryable...ViewModel的方式

    1K30

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

    但如果我告诉你,你所了解的LINQ只是冰山一角呢? 在表面之下,隐藏着一段迷人的历史、强大但被忽视的操作符,以及许多开发者(甚至是资深开发者)都误解的基础概念。...LINQ之父是图灵奖得主 LINQ优雅的语法绝非偶然,而是学术研究与工业实践深度融合的产物。其背后的远见者名叫Erik Meijer——这位荷兰计算机科学家因对编程语言的贡献获得了2011年图灵奖。...IQueryable不存储数据,它存储的是"配方" 这可能是最关键也最容易被误解的概念。当你针对数据库编写LINQ查询时,通常操作的是IQueryable。...许多开发者将其视为内存中的IEnumerable,但二者有本质区别: • IEnumerable是数据流,你可以遍历它 • IQueryable是表达式树,它是查询的"配方"或蓝图 当你对IQueryable...3. let关键字是隐藏的性能工具 在查询语法中,let关键字看似只是提高可读性的工具,用于在查询中创建中间变量。但它真正的威力在于缓存。 当你使用let存储计算结果时,该计算对每个元素只执行一次。

    19000

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

    在编程语言层次,LINQ对于不同的数据源提供了相同的查询语法,方便了程序员操作不同的数据源。...可查询类型 LINQ之所以能够使用相同的语法操作不同的数据源,是因为和LINQ直接打交道的是可查询类型而非数据源,在LINQ中,直接或间接实现了IEnumerable接口的类型称为可查询类型, ....LINQ表达式是对常用扩展方法在语法层面上的简化,LINQ表达式有着更好的可读性,在编译时LINQ表达式会被转化为对扩展方法的调用。...两个接口 在LINQ中,一个查询表达式被编译为表达式树或者委托,查询结果为IEnumerable类型则被编译为委托,查询结果是IQueryable或IQueryable类型则被编译为表达式树...System.Linq.IQueryable 在执行查询操作时,IQueryable先在服务器端进行过滤操作(如果有的话),然后再将数据放到本地内存中。

    3.7K30

    .NET面试题系列 - LINQ to Object

    LINQ to Object将查询语句转换为委托。LINQ to Entity将查询语句转换为表达式树,然后再转换为SQL。...在面试时,大部分面试官都不会让你手写LINQ查询,至少就我来说,写不写得出LINQ的Join并没所谓,反正查了书肯定可以写得出来。但面试官会对你是否理解了LINQ的原理很感兴趣。...实际上自有了委托起,LINQ就等于出现了,后面的特性都可以看成是语法糖。...一般来说,返回另外一个序列(通常为IEnumerable或IQueryable)的操作,使用延迟执行,而返回单一值的运算,使用立即执行。...隐式类型的存在使得我们不需要思考通过查询语句获得的类型是何种类型(大部分时候,我们也不关心它的类型),只需要简单的使用var就可以了。

    4.5K20

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

    经过前三篇文章的详细讲解,我们基本上对LINQ框架的构成原理有了一个根本的认识,包括对它的设计模型、对象的模型等,知道LINQ的查询表达式其实是C#之上的语法糖,不过这个糖确实不错,很方便很及时,又对一系列的...2】.扩展Linq to Object (应用框架具有查询功能) 我们知道LINQ所支持的查询范围主要在IEnumerable、IQueryable这两个方面,对于我们想要扩展LINQ的查询能力也主要集中在这两块...如果我们是直接使用系统提供的IEnumerable对象的话,只需要构建IEnumerable对象的扩展方法就能实现对集合类型的扩展。...IQueryable接口是Linq to Provider的入口,非常有意思的是它并不是一个IQueryable来支撑一次查询。...IQueryable继承自IEnumerable接口,也就是可以被foreach语法调用的,但是在GetEnumerator方法中才会去执行提供程序的代码。

    2.1K11

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

    名言警句 "理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列。" - Jon Skeet LINQ to Object和LINQ to SQL有何区别?...LINQ to SQL可以将查询表达式转换为SQL语句,然后在数据库中执行。相比LINQ to Object,则是将查询表达式直接转化为Enumerable的一系列方法,最终在C#内部执行。...LINQ to Object的数据源总是实现IEnumerable(所以不如叫做LINQ to IEnumerable),相对的,LINQ to SQL的数据源总是实现IQueryable查询表达式转换为SQL语句并不保证一定可以成功。 IQueryable 理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列。...可以得出正确的结果(test只有1笔输出),但使用自己的查询提供器,获得的SQL却是错误的(第一个Sex = M不见了)。

    2.2K10

    C#3.0新增功能09 LINQ 基础02 LINQ 查询简介

    为方便起见,此示例将一个整数数组用作数据源;但其中涉及的概念同样适用于其他数据源。 本主题的其余部分也会引用此示例。...支持 IEnumerable 或派生接口(如泛型 IQueryable)的类型称为可查询类型。 可查询类型不需要进行修改或特殊处理就可以用作 LINQ 数据源。...下例中,Customers 表示数据库中的特定表,而查询结果的类型 IQueryable 派生自 IEnumerable。...但基本规则很简单:LINQ 数据源是支持泛型 IEnumerable 接口或从中继承的接口的任意对象。...有关详细信息,请参阅 LINQ 中的查询语法和方法语法。 查询执行 延迟执行 如前所述,查询变量本身只存储查询命令。 查询的实际执行将推迟到在 foreach 语句中循环访问查询变量之后进行。

    4.8K30

    了解LINQ

    的对象就是一个实现了IEnumerable的可被枚举的集合 LINQ的基本用法 扩展方法在LINQ的应用:LINQ的流式语法 LINQ的方法一般都是通过扩展方法了扩展的,就如最常用的几个,Where,Any...就是因为LINQ就是为了简单的能够处理复杂集合的数据,那么扩展方法就能够实现较为简单的链式查询,例如: var result= animals.MyWhere(t => t is "Cat" or "Dog...").Select(t=>t.ToUpper()).ToList(); result.ForEach(t =>Console.WriteLine(t)); 输出结果: CAT DOG LINQ的查询表达式...:LINQ的查询语法 假如上述的例子有LINQ的查询表达式来编写,则写法是这样: var result = (from t in animals where t is "Cat...里的那个表达式树属性Expression,而像LINQ To Sql或者是EFCore等需要IQueryable这种解释型的就是去实现了IQueryProvider里面的方法 参考 《C#7.0核心技术指南

    1.4K20

    Entity Framework 的一些性能建议

    所以每次我写LINQ查询,都会使用SQL Profiler看一下实际生成的SQL语句,以便发现潜在的性能问题。也强烈建议大家这么去做,以免日后软件大了出了问题很难查。 ?...只选择某列或某些列 有些时候,在C#里写LINQ虽然看着舒服,但性能不一定好,所以有必要做一些调整。...因为单纯声明一个linq表达式并不会立即执行SQL查询,然而一旦在后面加上ToList(),就会立即去执行。...大部分时候这两个接口在使用上的表现都是一致的,但如果你要做的是一个不确定的查询,意思是这个查询表达式不是一次性确定的,对于它的结果可能由别的类来选择到底select哪些东西,这时候就要用IQueryable...我们只需要一个Count,为毛会这么复杂呢? 回顾第一条我所讲过的。不难发现。在FirstOrDefault(...)之后访问的属性,都是在内存里进行的。

    2.2K30

    C#3.0新增功能09 LINQ 标准查询运算符 01 概述

    系列目录 【已更新最新开发文章,点击查看详细】 标准查询运算符 是组成 LINQ 模式的方法。...共有两组 LINQ 标准查询运算符,一组作用于类型 IEnumerable 的对象,另一组作用于类型 IQueryable 的对象。...这意味着可以使用静态方法语法或实例方法语法来调用它们。 此外,多个标准查询运算符方法作用于那些基于 IEnumerable 或 IQueryable 的类型外的类型。...这些方法(Cast(IEnumerable) 和 OfType(IEnumerable))均允许在 LINQ 模式中查询非参数化或非泛型集合。...源 IQueryable 对象执行查询处理。 可以在一个查询中将对查询方法的调用链接在一起,这就使得查询的复杂性可能会变得不确定。

    97520

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

    LINQ的语法最终也是IL的语法,当我们编写LINQ的查询表达式的时候其实编辑器已经智能的帮我们翻译成对象的方法。太多的原理在下一结介绍。...另外一类LINQ支持的查询对象便是我们自定的数据源了,这类数据源的查询链式方法是由System.Linq.Queryable类提供的,如果我们使用LINQ查询表达式来查询System.Linq.IQueryable...不管是查询Linq to object 还是自定的数据源,查询的LINQ语法是不变的,这也就是统一了数据查询接口,要变的是数据查询提供程序,Linq to Sql、Linq to Entities都是实现了自定义的数据源查询功能...对于Linq to object 其实没有太多好讲的了,要做的就是熟悉LINQ的查询表达式语法。...IQueryable接口,当我们使用LINQ来查询IQueryable接口时查询表达式会被直接编译成对应的Queryable静态类中的对应的静态扩展方法。

    2.9K30
    领券