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

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

大部分LINQ语句是在最终结果的第一个元素被访问的时候(即在foreach中调用MoveNext方法)才真正开始运算的,这个特点称为延迟执行。...一般来说,返回另外一个序列(通常为IEnumerableIQueryable)的操作,使用延迟执行,而返回单一值的运算,使用立即执行。...它由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

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

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

在目前.NET平台上的主流ORM框架ADO.NET EntityFramework中的架构体系中的概念层中的设计就体现出了对象模型的作用。...在ADO.NET EntityFrameWork、Linq to SQL框架中有很多值得我们探索的对象模型。...2.4.深入IQueryableIQueryable、Queryable(LINQ to Provider框架的入口) IQueryable接口是提供给我们来实现自定义数据源用的,为了支持强类型的数据源集合我们直接使用...组件开发人员首要的任务就是创建对象模型,该对象模型应该是真正数据源的抽象模型,以便于该对象可能成功的被放入到IQueryable中进行查询。...LINQ查询表达式最后是调用的链式查询方法,这些方法都是在静态类中定义好的,IEnumerable类型是直接的使用匿名方法调用执行,而IQueryable是使用人工解析的方式进行的,也就是自定义数据源

2.1K30

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

支持 IEnumerable 或派生接口(如泛型 IQueryable)的类型称为可查询类型。 可查询类型不需要进行修改或特殊处理就可以用作 LINQ 数据源。...下例中,Customers 表示数据库中的特定表,而查询结果的类型 IQueryable 派生自 IEnumerable。...支持非泛型 IEnumerable 接口的类型(如 ArrayList)还可用作 LINQ 数据源。 有关详细信息,请参阅如何:使用 LINQ 查询 ArrayList (C#)。...它只是存储在以后某个时刻执行查询时为生成结果而必需的信息。 有关在后台如何构造查询的详细信息,请参阅标准查询运算符概述 (C#)。 还可以使用方法语法来表示查询。...在应用程序中,可以创建一个检索最新数据的查询,并可以按某一时间间隔反复执行该查询以便每次检索不同的结果强制立即执行 对一系列源元素执行聚合函数的查询必须首先循环访问这些元素。

3.5K30

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

IQueryable继承自IEnumerable,是个标记接口。...可查询类型无需额外操作即可进行LINQ操作,若数据源在内存中不以可查询类型的形式存在,那么LINQ提供程序必须要先将数据源转换为可查询类型,如LINQ to XML将XML文件转换为可查询的XElement...LINQ查询特点: 延迟查询 若查询表达式的返回结果IEnumerable类型,则在声明查询表达式时不会执行查询,而是在迭代查询变量时才进行查询。...两个接口 在LINQ中,一个查询表达式被编译为表达式树或者委托,查询结果IEnumerable类型则被编译为委托,查询结果IQueryableIQueryable类型则被编译为表达式树...(C#) LINQ provider basics Enabling a Data Source for LINQ Querying LINQ: Building an IQueryable Provider

2.7K30

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

) 匿名类型 构建联接和叉积查询 join 子句 如何:使用组合键进行联接 如何:联接不同文件的内容 (LINQ) (C#) 如何:对 join 子句的结果进行排序 如何:执行自定义联接操作 如何:执行分组联接...Enumerable.AsEnumerable AsQueryable 将(泛型)IEnumerable换为(泛型)IQueryable。 不适用。...Enumerable.OfTypeQueryable.OfType ToArray 将集合转换为数组。 此方法强制执行查询。 不适用。...此方法强制执行查询。 不适用。 Enumerable.ToDictionary ToList 将集合转换为 List。 此方法强制执行查询。 不适用。...方法 方法名 说明 C# 查询表达式语法 详细信息 聚合 对集合的值执行自定义聚合运算。 不适用。

9.6K20

C#内建接口:IQueryable

这节来讲一下C#中的内建接口:IQueryableIQueryableIEnumerable 接口的子接口,相比之下提供了更丰富的查询功能。...在 C# 中,常用的查询提供者是 Entity Framework(EF),它可以将 IQueryable 查询转换为适当的 SQL 查询语句,并与数据库进行交互以获取结果。...总结而言,IQueryable 接口是在 C# 中用于表示可查询数据源的接口,它提供了延迟查询的能力、强类型的查询表达式、查询提供者和查询优化等特性。...IQueryable 对象,针对这个查询对象,我们用 Where 方法筛选出偶数,再使用 Select 方法将每个偶数乘以 10取这样一个结果。...历史文章: C#内建接口:IEnumerable C#内建接口:IEquatable泛型

25410

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

经过前三篇文章的详细讲解,我们基本上对LINQ框架的构成原理有了一个根本的认识,包括对它的设计模型、对象的模型等,知道LINQ的查询表达式其实是C#之上的语法糖,不过这个糖确实不错,很方便很及时,又对一系列的...2.3】.详细的对象结构图 这个小结主要将IEnumerable及它的扩展方法包括Linq的查询进行一个完整的结构分析,将给出详细的对象结构导图。 对象静态模型、运行时导图: ?...Linq 只是辅助我们快速查询的语言,并不是.NET或者C#的一部分,在任何.NET平台上的语言中都可以使用。...IQueryable并非IEnumerable对象,无法实时的做出处理然后将结果返回给下一个方法接着执行。那么它如何将片段性的执行方法串成一个整的、完整的查询?...看似一次执行却隐藏着多次方法调用,后台暗暗的构建了我们都不知道的执行模型,让人欣喜若狂。我们来揭开IQueryable在链式方法中到底是如何处理的,看看它到底藏的有多深。

1.4K11

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

LINQ to SQL可以将查询表达式转换为SQL语句,然后在数据库中执行。相比LINQ to Object,则是将查询表达式直接转化为Enumerable的一系列方法,最终在C#内部执行。...将查询表达式转换为SQL语句并不保证一定可以成功。 IQueryable 理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列。...IQueryable是一个继承了IEnumerable接口的另一个接口。 Queryable是一个静态类型,它集合了许多扩展方法,扩展的目标是IQueryableIEnumerable。...它令IQueryableIEnumerable一样,拥有强大的查询能力。 AsQueryable方法将IEnumerable换为IQueryable。...IQueryableIEnumerable的异同? 首先IQueryable是解析一棵树,IEnumerable则是使用委托。

1.6K10

Entity Framework 的一些性能建议

只选择某列或某些列 有些时候,在C#里写LINQ虽然看着舒服,但性能不一定好,所以有必要做一些调整。...IQueryable, IEnumerable 在这两个接口的选择上,我偏向使用IQueryable。...大部分时候这两个接口在使用上的表现都是一致的,但如果你要做的是一个不确定的查询,意思是这个查询表达式不是一次性确定的,对于它的结果可能由别的类来选择到底select哪些东西,这时候就要用IQueryable...很显然,它会被系统中的其他方法调用,而这些调用者希望得到的结果都各不相同。...但这时,很不幸的是,where语句中的条件并不是转换为native sql去执行的,它是在内存中筛选的。这是一个比较阴的性能问题。

1.7K30

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

另外,如果程序涉及多线程,或者你的序列含有随机因素,你的每次枚举的结果可能不同。我们只需要枚举同一序列一次,之后将结果储存为一个泛型集合即可。 例如我们的序列带有随机数: ? 此时我们会遍历序列四次。...注意当你返回IEnumerable时,你并没有开始遍历这个序列(只有当你强制LINQ执行时,才会执行这个返回IEnumerable的方法)。...结果: ? 可以看到Foreach的表现稍好一点。LINQ的额外开销在于将lambda表达式转换为委托的形式,而foreach不需要。...自定义ORM 通常,只有在如下情况下才会考虑将自己写的ORM投入生产使用: 存在一些特定的复杂查询,在项目中广泛出现,此时自己写的ORM做了很多优化,表现好于EF 存在一些特定的业务逻辑,例如将表达式解析为...避免过早的ToList,返回IEnumerable/ IQueryable类型的巨大规模的数据。 是否需要重复极其多次运行相同的LINQ语句?考虑使用foreach或者PLINQ来优化性能。

2.6K40

让我们一起写出更有效的CSharp代码吧,少年们!

周末空闲,选读了一下一本很不错的C#语言使用的书,特此记载下便于对项目代码进行重构和优化时查看。...Factory( FactoryFunc newT) where T:new() { T t = newt();} 通过运行时类型检查具体化泛型算法 比如根据不同的集合类型优化相应算法 使用泛型强制执行编译时类型推测...区别IEnumerableIQueryable的数据源 由于IQueryable数据源其实是对IEnumerable数据源的封装和增强,简答来说,IQueryable对象的相关数据处理操作的性能要远高于...IEnumerable对象,因而如果实际的返回值为IQueryable对象,那么不要经行相关的转化,当然也可以通过typeA as IQueryable来尝试转化,如果本来就是IQueryable对象则直接返回...More Effective C#[M]. 北京:人民邮电出版社, 2009.

1K50

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

集成性: LINQ与.NET语言(如C#)紧密集成,不需要额外学习新的查询语言。 支持扩展: 可以通过自定义扩展方法来为LINQ添加自定义查询操作。...数据转换:可以将一种数据形式转换为另一种,如将数据库结果换为对象集合。...3.2 如何创建和准备LINQ查询的数据源 创建和准备LINQ查询的数据源涉及从各种数据类型中获取数据,然后将其转换为适用于LINQ的数据类型,例如IEnumerableIQueryable等。...九、自定义LINQ查询 9.1 创建和使用扩展方法 在 C# 中,LINQ 扩展方法是一种允许你自定义 LINQ 查询操作的方式。...9.2 自定义LINQ查询操作符 在 C# 中,你可以创建自定义的 LINQ 查询操作符,以扩展 LINQ 查询语法,使其支持你自定义的查询操作。

1.6K61

【asp.net core 系列】8 实战之 利用 EF Core 完成数据操作层的实现

EF Core 批量加载模型 通常情况下,在使用ORM的时候,我们不希望过度的使用特性来标注实体类。因为如果后期需要变更ORM或者出现其他变动的时候,使用特性来标注实体类的话,会导致迁移变得复杂。...EF Core的配置类我们在《C# 数据访问系列》中关于EF的文章中介绍过,这里就不做过多介绍了(没来得及看的小伙伴们不着急,后续会有一个简单版的介绍)。...entities); } 在修改接口里,我预留了几个方法没有实现,因为这几个方法使用EF Core自身可以实现,但实现会比较麻烦,所以这里借助一个EF Core的插件: dotnet add package Z.EntityFramework.Plus.EFCore...则抛出异常 First 返回结果集的第一个元素,如果结果集没有数据,则抛出异常 FirstOrDefault 返回结果集的第一个元素,如果没有元素则返回null 实现查询方法: public List<...这里的处理利用了C# Expression的一个技术,这里就不做过多介绍了。后续在.net core高级篇中会有介绍。 4.

1.6K40

C#规范整理·集合和Linq

11.使用匿名类型存储LINQ查询结果(最佳搭档)# 从.NET 3.0开始,C#开始支持一个新特性:匿名类型。匿名类型由var、赋值运算符和一个非空初始值(或以new开头的初始化项)组成。...IEnumerable<T>接口的集合类进行扩展;Queryable类,它针对继承了IQueryable<T>接口的集合类进行扩展。...那么,到底什么时候使用IQueryable<T>,什么时候使用IEnumerable<T>呢?简单表述就是:本地数据源用IEnumerable<T>,远程数据源用IQueryable<T>。...注意 在使用IQueryable<T>和IEnumerable<T>的时候还需要注意一点,IEnumerable<T>查询的逻辑可以直接用我们自己所定义的方法,而IQueryable<T>则不能使用自定义的方法...在使用IQueryable<T>查询的时候,如果使用自定义的方法,则会抛出异常。 13.使用LINQ取代集合中的比较器和迭代器# LINQ提供了类似于SQL的语法来实现遍历、筛选与投影集合的功能。

18330

.NET面试题系列 - LINQ to Object

LINQ to Object将查询语句转换为委托。LINQ to Entity将查询语句转换为表达式树,然后再转换为SQL。...因为LINQ to Object绝大多数时候都是和IEnumerable以及它的派生类打交道,扩展了IEnumerable的Enumerable类,赋予IEnumerable强大的查询能力...一般来说,返回另外一个序列(通常为IEnumerableIQueryable)的操作,使用延迟执行,而返回单一值的运算,使用立即执行。...利用ToList强制执行LINQ语句 下面的代码和上面的区别在于我们增加了一个ToList方法。思考会输出什么? ? ToList方法强制执行了所有LINQ语句。...最后,对整个数列进行迭代,并一一进行判断获得结果。如果使用LINQ,则整个过程将会简化为只剩一句话。 C# 2.0中匿名函数的提出使得我们可以把Predicate方法内联进去。

3.4K20
领券