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

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

而类似ToList / Max / Last / Sum / Contain等方法显而易见会遍历整个序列。 例如你判断一个集合是否有成员时,请使用Any而不是Count==0。...但每次序列都会不同。例如如果我们呼叫Sum方法四次,则可能会出现4个不同和。我们必须使用ToList方法强制LINQ提前执行。...在代码中,选择了前100个score(一条SQL),然后对所有score进行遍历,表Student中获得Name(100条SQL)。 解决方法也在文章中给出了,就是将两个表连到一起。...(当然还有很多其他工具,或者最基本就是用SQL Profiler不过比较麻烦) LINQ to SQL性能问题 提升数据库中拿数据速度,可以参考以下几种方法: 在数据库中表中定义合适索引和键...在EF6中,我们还可以使用这样方法: ? 注意:编译器不一定能够将你LINQ语句翻译SQL,例如字符串IndexOf方法就不被支持。

2.6K40

Entity Framework 一些性能建议

如果你只是想根据条件选择其中一些数据,而非全部的话,那ToList()以后再筛选,就是内存里执行了,并不是把你条件转换成sqlwhere语句去执行。.... // 建立查询,但不执行 var result = query.ToList(); // 立即执行查询 所以,你应当尽量避免ToList()结果中再去查找自己想要元素。 ?...所以文章一开始我就建议大家多用SQL Profiler看看自己LINQ是怎么执行。 如果把返回类型换成IQueryable,那么你where语句就可以转化为SQL执行。...再紧接其后Count就自然而然在内存里进行了。 如果要让代码尽量去生成LINQ to SQL,有个很简单原则,就是尽量用LINQ、Lambda表达式,这样EF才可能帮我们翻译。...Count()接受了一个lambda表达式,LINQ to SQL就能准确翻译为“SELECT COUNT”了: SELECT [GroupBy1].

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

LINQ&EF任我行(二)–LinQ to Object (转)

最终编译器都是把LinQ句法翻译成扩展方法链式表达式,同时把扩展方法中lambda表达式转换成匿名类中匿名方法,然后再把查询表达式编译成MSIL。...LinQ to SQLLinQ to DataSets、LinQ to Entities和LinQ to XML则不是把查询表达式转换成MSIL,而是把查询表达式树转换成相应特定查询语言。...LinQ to SQL会生成T-SQLLinQ to Entities会生成eSQL,LinQ to XML会生成XPath语句等。 LinQ标准查询操作符列表 ?...这种对象与对象关联与SQLJoin关联语法上有些不同。 1.LinQJoin不支持SQL-92中一些比较运算符,如>、等。...《图5》 在C#3.0查询表达式语法中没有GroupJoin语法,可以使用Join…into…来实现,它与Join不同是,它可以实现类似于SQL外联接效果,而Join只实现类似于SQL内联效果。

2.4K30

C#进阶-LINQ表达式基础语法

本篇文章我们将演示LINQ扩展包基础语法,以Select查询、Count计数、Average平均值、OrderBy排序函数为例,目前LINQ支持两种语法,我会在每个案例前先用大家熟知SQL语句表达,...2、Count 计数/* SQL表达: 查找用户里姓Zhang女性教师数量*/select count(*) from user where occupation = "Teacher" and...true /* 输出结果 */这里Any()函数是只要存在至少一个符合全部条件结果,即返回布尔True,只有在一个都不符合条件情况下才会返回False;与之相反,All()函数只有在全部数据都符合全部条件情况下...Linq可以用于各种数据源,包括数组、列表、XML文件以及数据库。本部分将总结Linq关键特性,并通过一个同类程序集对比表格,展示Linq不同环境下应用与效能。...,能够简化复杂数据操作并整合不同数据源。

11521

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

查询 是一种数据源检索数据表达式。 查询通常用专门查询语言来表示。 随着时间推移,人们已经为各种数据源开发了不同语言;例如,用于关系数据库 SQL 和用于 XML XQuery。...(@"c:\myContactList.xml");// xml 文件创建数据源 借助 LINQ to SQL,首先在 Visual Studio 中手动或使用 Visual Studio 中 LINQ...例如,在上一个查询中,迭代变量 num 保存了返回序列中每个(一次保存一个)。 由于查询变量本身从不保存查询结果,因此可以根据需要随意执行查询。...由于查询本身必须使用 foreach 以便返回结果,因此这些查询在执行时不使用显式 foreach 语句。 另外还要注意,这些类型查询返回单个,而不是 IEnumerable 集合。...; int evenNumCount = evenNumQuery.Count(); 要强制立即执行任何查询并缓存其结果,可调用 ToList 或 ToArray 方法。

3.5K30

【深入浅出C#】章节 9: C#高级主题:LINQ查询和表达式

返回结果: 最终,LINQ查询会返回一个结果集,该结果集可以是一个集合、一个单一或其他形式,取决于查询目的和数据源。...ToList / ToArray: 将查询结果转换为列表或数组。 Count: 返回元素数量。 First / FirstOrDefault: 返回第一个元素。...var numbers = Enumerable.Range(1, 10); // 创建1到10整数序列 Enumerable.Repeat: 创建一个重复序列。...to Entities / LINQ to SQL:使用ORM工具(如Entity Framework或LINQ to SQL数据库中获取数据。...4.2 查询操作符返回类型和结果处理 LINQ查询操作符返回类型取决于操作符本身以及操作前数据源类型。不同操作符可能返回不同类型序列或单个元素。

1.3K61

EntityFramework数据持久化复习资料5、LINQ概述与应用(超终点)

ORM使类提供自动化CRUD,使 开发人员数据库API和SQL中解放出来。...在LINQ中,可以使用与查询数据库相同编码模式来查询和转换XML文档、SQL数据库、ADO.NET数据集以及.NET集合中数据,并支持LINQ查询任何格式数据。...LINQ关键字 关键字 说明 from 指定范围变量和数据源 where 根据bool表达式数据源中筛选数据 select 指定查询结果中元素所具有的类型或表现形式 group 对查询结果按照键/执行分组...2、LINQ根据【昵称】模糊查询返回列表 模糊查询并遍历·这里用到是字符串【Contains】函数,ToList()返回一个列表。...6个属性 方法名 说明 Count 对集合中元素计数,以及对集合中满足条件元素计数 LongCount 与Count相同,当Count中元索个数超过int类型上限时使用 Max 确定集合中最大

2.2K20

03-EF Core笔记之查询数据

EF Core有三种常见模型来加载关联数据: 预先加载:表示数据库中加载关联数据,作为初始查询一部分 显式加载:表示稍后数据库中显式加载关联数据 延迟加载:表示在访问关联数据时,再从数据库中加载关联数据...(); } 如果更改查询,从而使其不再返回查询以之为开头实体类型实例,则会忽略 include 运算符。...查询 当Linq无法满足查询需求,或因为使用Linq生成效率比较低SQL查询时,可以考虑使用原始SQL进行查询。...在执行查询时,EF Core会检查我们sql语句是否支持拼接,如果支持情况下,则会将linq过滤语句拼接为sql一并发送到数据库进行查询。 跟踪 原始SQL跟踪与Linq查询跟踪方式一致。...关联数据 原始SQL中查询关联数据方式与Linq查询关联方式一致。 全局筛选器 全局筛选器对于软删除和多租户非常有用。

2.4K20

C# 基础知识系列- 6 Lambda表达式和Linq简单介绍

不同是其中Func表示一个有返回方法,Action表示一个没有返回方法。...name){ //有一个参数,但没有返回方法 } Action act2 = Demo2; public String Demo3(){ // 有返回,但没有参数方法...Linq有两种使用方式,一种是通过方法链方式调用,一种是类似SQL语句方式进行数据查询。方法链是基础,类SQL方式是语法糖。...需要特别注意一点: Linq查询是一种延迟查询,也就是说当返回类型是一个IEnumerable 时候不会立即返回结果,必须调用ToList才能获取到实际查询结果。...另外需要注意是,ToList返回是一个不可变List集合,这一点在集合篇中做过介绍了。

1K50

C# 基础知识系列-7 Linq详解

前言 在上一篇中简单介绍了Linq入门级用法,这一篇尝试讲解一些更加深入使用方法,与前一篇结构不一样地方是,这一篇我会先介绍Linq支持方法,然后以实际需求为引导,分别以方法链形式和类SQL...解决方案:调用FirstOrDefault/LastOrDefault,这两组方法在无法查询到结果时会返回一个默认。... (this IEnumerable source, int count); 第二个:SkipLast,尾巴开始略过几个元素,返回剩下元素内容 public static.../LongCount 数量查询 这是一组行为一样方法,就是对数据源进行计数,不同Count返回int,LongCount返回long。...获取只存在于第一个集合元素,第一个集合中去除同时存在与第二个集合元素,并返回

2.3K50

LINQ to SQL中使用Translate方法以及修改查询用SQL

老赵在最近项目中使用了LINQ to SQL作为数据层基础,在LINQ to SQL开发方面积累了一定经验,也总结出了一些官方文档上并未提及有用做法,特此和大家分享。   ...在调用Translate方法后为什么要直接调用ToList方法:因为GetItemsForListing方法返回是List,这是原因之一。...这也是一种Lasy Load,但是也导致了所有的对象必须在Reader对象关闭之前生成,所以我一般都会在Translate方法直接调用ToList方法,保证所有的对象已经生成了。...这种情况会在实体对象属性名与数据表字段名不同时候发生。在使用LINQ to SQL时默认生成实体对象,其属性名与数据库字段名完全对应,这自然是最理想情况。...查看方法返回结果就能知道,所有对象OwnerID都是默认“0”,这是怎么回事呢?使用SQL Profiler观察以上代码所执行SQL语句之后我们便可明白一切: SELECT [t0].

4.8K50

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

在编程语言层次,LINQ对于不同数据源提供了相同查询语法,方便了程序员操作不同数据源。...LINQ操作及一些扩展操作(如:LINQ to XML),不同LINQ提供程序对于一些相同名称扩展方法会提供不同实现方式。....表达式和扩展方法在编译代码没有什么区别 对于排序、分组、联合查询使用LINQ表达式更为方便 //以排序为例,使用年龄、姓名、邮箱进行排序, //LINQ表达式中使用逗号分隔排序字段,而扩展方法则需要多次调用相应扩展方法...立即查询 若查询表达式返回单个或者使用了ToList、ToArray等方法时会执行立即查询,因为这些操作会遍历数据。...LINQ表达式中查询关键字 表格中英文没什么难点,就不翻译了 :) 关键字 描述 from Specifies a data source and a range variable (similar

2.7K30

Linq基础知识之延迟执行

Linq绝大多数查询运算符都有延迟执行特性,查询并不是在查询创建时候执行,而是在遍历时候执行,也就是在enumeratorMoveNext()方法被调用时候执行,大说数Linq查询操作实例方法返回都是...注:其他一些像First、Count、ToArray、ToList、ToDictionary、ToLookup这些都是立即执行....当然,对于Linq来说,延迟执行是非常重要,因为它把查询创建和查询执行解耦了,这让我们可以像创建SQL查询那样,分成多个步骤来创建我们LINQ查询。...和传统集合类型如array,linked list不同,一个装饰者sequence并没有自己用来存放元素底层结构,而是包装了我们在运行时提供另外一个sequence。...此后当我们装饰者sequence中请求数据时,它就会转而包装sequence中请求数据。

1.7K100

C#进阶-LINQ表达式基础语法Ⅱ

本篇文章我们将演示LINQ扩展包基础语法,以Any、All、Single、Skip、Take、Top等函数为例,目前LINQ支持两种语法,我会在每个案例前先用大家熟知SQL语句表达,再在后面用C#两种...30岁职业是医生女性 */ select count(*) from user where occupation = "Doctor" and gender = false and age < 30;...true /* 输出结果 */ 这里Any()函数是只要存在至少一个符合全部条件结果,即返回布尔True,只有在一个都不符合条件情况下才会返回False;与之相反,All()函数只有在全部数据都符合全部条件情况下...,多条满足条件或一条也没有,此方法会报错; SingleOrDefault()要求最多有一条满足要求数据,多条满足条件,此方法会报错;没有数据则返回数据类型默认; 类似的还有First()、FirstOrDefault...()、Last()、LastOrDefault(),这里给大家做了一个异常表格记录了各种情况返回: 函数 没有满足 一条满足 多条满足 list本身为Null Single 异常 该元素 异常 异常

13510

.NET深入解析LINQ框架(六:LINQ执行表达式)

到目前为止我们对LINQ执行原理已经很清楚了,前期构想到它真正为我们所用都有足够证据,但是似乎问题并没有我们想那么简单,问题总是在我们使用中频频出现尤其是新技术使用,当然有问题才能有进步。...跟Linq to Object不同Linq to Object是将Lambda直接解析成泛型Func类型委托,但是我们很多人包括我自己都忽视了一个很大细节,就是Provider在内部将对Expression...我们忽视一个重要环节,就是VS对LINQ进行解析翻译时候是会执行LINQ表达式,这点非常重要。...我们还是来看一个比较简单LINQ解析SQL和链式方法; LINQ查询表达式:from truck in TB_CX_TRUCKs where 1==1 ||truck.LICENSE_NUMBER.Length...总结:其实说了那么多目的只有一个,LINQ解析过程并非只有一个“提供程序翻译SQL过程,而是包括了两个阶段,四个过程处理,LINQ写法很多种,原理应该是差不多,只要我们在写LINQ时候综合考虑这几个处理过程

1.3K10

LINQ驱动数据查询功能

1.1 LINQ VS 循环处理       在我刚工作时候,对于集合对象处理一般是采用循环这个集合处理,在处理实类型上这样做效率还行,但是如果集合内是引用类型,使用LINQ就方便多,例如一个程序要计算课程总分和平均分...#总分是:{0},平均分是:{1}", CSSum, CSSum/students.Count); Console.WriteLine("本班SQL总分是:{0},平均分是:{...1}", DBSum, DBSum / students.Count); Console.ReadKey(); 使用Linq代码处理如下 Console.WriteLine...(3)  两个匿名类型对象相等,必须要两个对象属性都相等才行。       (4) 匿名类型初始化只能利用对象初始化器来进行,其属性生成后会变成只读。...var限制如下: (1)使用var类型赋值语句时右边不能为null,否则编译器无法推断其类型。 (2)var类型只能用于局部变量声明,不能用于全局变量,类层变量或者是函数返回

2.9K90

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

LINQ to SQL中lambda表达式首先被转化为表达式树,然后再转换为SQL语句。 我们试图实现一个可以将where这个lambda表达式翻译SQL语句查询提供器。...拥有连接数据库,简单执行sql语句(不需要返回,用于DDL或delete语句)和通过执行Sql语句,返回若干实体功能(用于select语句)。...仍然是使用我们自己查询提供器逻辑,执行SQL,输出正确。...将程序员SQL语句拼接(尤其是insert)中解放出来,它既容易错,又很难发现错误。现在插入对象都是强类型,就犹如插入一个List一样。...ORM则会在编译时就会发生错误,而且只需要更改对象属性类型就不会发生问题。 缺点: 有些复杂SQL或者SQL内置方法不能通过ORM翻译。 自动产生SQL语句有时性能较低,这跟产生机理有关。

1.6K10

走进 LINQ 世界

此外,您还必须针对以下各种数据源学习一种不同查询语言:SQL 数据库、XML 文档、各种 Web 服务等等。...一、介绍 LINQ 查询   查询是一种数据源检索数据表达式。随着时间推移,人们已经为各种数据源开发了不同语言;例如,用于关系数据库 SQL 和用于 XML XQuery。...查询还可以指定在返回这些信息之前如何对其进行排序、分组和结构化。 查询存储在查询变量中,并用查询表达式进行初始化。   之前示例中查询是整数数组中返回所有的偶数。...(如果您熟悉 SQL,您会注意到这些子句顺序与 SQL顺序相反。) from 子句指定数据源, where 子句指定应用筛选器, select 子句指定返回元素类型。...另外还要注意,这些类型查询返回单个,而不是 IEnumerable 集合。

4.6K30
领券