IQueryable和IEnumerable,IList的区别】的更多相关文章

IQueryable和IEnumerable都是延时执行(Deferred Execution)的,而IList是即时执行(Eager Execution) IQueryable和IEnumerable在每次执行时都必须连接数据库读取,而IList读取一次后,以后各次都不需连接数据库.前两者很容易造成重复读取,性能低下,并且可能引发数据不一致性 IQueryable和IEnumerable的区别:IEnumberalb使用的是LINQ to Object方式,它会将AsEnumerable()时…
原文:http://www.cnblogs.com/hiteddy/archive/2011/10/01/Difference_among_IQueryable_IEnumeralb_IList_in_Entity_Framework.html 使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的SQL以发现问题所在. 使用过Toplink的朋友知道很…
使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的SQL以发现问题所在. 使用过Toplink的朋友知道很只要设置日志打印级别=FINE就可以配置使之生成的SQL在服务器中打印出来,Entiry Framework没有那么幸运,在以前要检测生成SQL的唯一方法是SQL Server Profiler,但使用起来并不方便,结果也不能自动保存到文件中.…
博客园里有这样的总结.这里姑且先列个题目, 提醒自己记忆.…
一:一个简单的例子 int[] myArray = { 1, 32, 43, 343 }; IEnumerator myie = myArray.GetEnumerator(); myie.Reset(); while (myie.MoveNext()) { int i = (int)myie.Current; Console.WriteLine("Value: {0}", i); } 通常我们这样会这样做: foreach (int item in myArray) Console.…
额...今天看了半天Ilist<T>和List<T>的区别,然后惊奇的发现使用IList<T>还是List<T>对我的项目来说没有区别...  在C#中,数组.ArrayList都能够存储一组对象,那么三者到底有什么样的区别呢? 数组 数组在C#中最早出现的.在内存中是连续的,所以它的索引速度非常快,而且赋值与修改元素也很简单. string[] s=new string[2]; //赋值 s[0]="a"; s[1]="b&q…
IQueryable和IEnumerable都是延时执行(Deferred Execution)的,而IList是即时执行(Eager Execution)IQueryable和IEnumerable在每次执行时都必须连接数据库读取,而IList读取一次后,以后各次都不需连接数据库.前两者很容易造成重复读取,性能低下,并且可能引发数据不一致性IQueryable和IEnumerable的区别:IEnumberalb使用的是LINQ to Object方式,它会将AsEnumerable()时对应…
做C#的同学们,都知道,一类只能有一个继承类,但可以实现多个接口.这句话就告诉我们:IEnumerable,ICollection,IList,List区别了 首先我看看 IEnumerable: // 摘要: // 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代. // // 类型参数: // T: // 要枚举的对象的类型. [TypeDependency("System.SZArrayHelper")] public interface IEnumerable<ou…
做C#的同学们,都知道,一类只能有一个继承类,但可以实现多个接口.这句话就告诉我们:IEnumerable,ICollection,IList,List区别了 首先我看看 IEnumerable: // 摘要: // 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代. // // 类型参数: // T: // 要枚举的对象的类型. [TypeDependency("System.SZArrayHelper")] public interface IEnumerable<ou…
注意:本文背景为 Linq to sql .文中ie指代IEnumerable,iq指代IQueryable. IQueryable 和 IEnumerable 的区别 IQueryable 延时执行:扩展方法接受的是Expression(必须要能转成sql,否则报错) IEnumerable 延时执行:扩展方法接受的是Func(C#语法) AsEnumerable() 和 ToList() 的区别 ToList() 立即执行,加载数据到内存中. AsEnumerable() 延时执行,真正使用…
最近的一个面试中,被问到IQueryable 和 IEnumerable的区别, 我自己看了一些文章,总结如下: 1. 要明白一点,IQueryable接口是继承自IEnumerable的接口的. 2. IQueryable中有表达式树, 这可以看作是它的一个优势.所以,使用IQueryable操作时,比如对数据的过滤,排序等操作, 这些都会先缓存到表达式树中. 当对数据库操作真正发生时,它才会将表达式树执行来获取数据. 这也就是说,比如选择top 2两行数据, 它会先在表达式树中缓存这个过滤取…
原文:https://www.cnblogs.com/WinHEC/articles/understanding-var-and-ienumerable-with-linq.html 使用LINQ从数据库和集合中查询数据时,我们使用IEnumerable和IQueryable进行数据处理. IQueryable继承自IEnumerable,因此IQueryable具有IEnumerable的所有功能,除此之外,它还具有自己的功能. 两者都有自己的重要性来查询和操作数据. 让我们看看二者的优势,并…
在使用EF查询数据的时候,我们常用的查询数据方式有linq to sql,linq to object, 查询返回的结果有两种类型:IQueryable.IEnumerable,两者内部的处理机制是完全不同的. 清楚认识,这里也是一个数据查询的优化点. 在System.linq命名空间,有两个静态类:Queryable和Enumerable. 在System.linq.Queryable中,参数接收的是一个表达式类型,返回IQueryable接口 public static IQueryable…
使用EF你必须知道这两个的区别,可以帮助我们的提升性能. 表达树:Linq 表达 ①IQueryable和IEnumerable IQueryable 延时执行:扩展方法接受的是Expression(必须要能转成sql,否则报错) IEnumerable 延时执行:扩展方法接受的是Func(C#语法) ②AsEnumerable() 和 ToList() 的区别 ToList() 立即执行,加载数据到内存中. AsEnumerable() 延迟执行,真正使用时才加载数据.对IQueryable对…
本节内容,涉及4.6(P116-P130).主要NuGet包:如前述章节 一.LINQ和EFCore的集合查询扩展方法的区别 1.LINQ和EFCore中的集合查询扩展方法,虽然命名和使用完全一样,都两者定义在不同的命名空间下,是不同的方法.PS:LINQ定义在System.Linq中,EFCore定义在Microsoft.EntityFrameworkCore中 2.我们将集合操作的扩展方法,划分为两类:①非立即执行方法,如Where.OrderBy.Select.GroupBy.Skip.T…
IQueryable 和 IEnumerable 其实,对于上面的即有过虑又有排序的条件查询Linq语句,EF是读取数据库中整个Books表中的数据到内存,还是根据Linq查询语句智能的生成SQL再执行查询,完全编码者来决定的.我们打开BookShop.Domain工程的BookRepository类文件,请注意该类中Books属性的返回类型: ... public IQueryable<Book> Books { get { return context.Books; } } 在上篇博文中,…
IQueryable 和 IEnumerable的扩展方法 一  我们从ef的DbSet<T>看起来,我们看到他继承了IQueryable<T> 和 IEnumerable<T> 二 写了个例子,分别传入Expression<Func<T,bool>>和Func<T,bool> static void Main(string[] args) { Test<Users> ut = new Test<Users>(…
1. IEnumerable<T> IEnumerable<T> :对于在内存中集合上运行的方法,返回的可枚举对象将捕获传递到方法的参数.在枚举该对象时,将使用查询运算符的逻辑,并返回查询结果. IEnumerable<T>在.Net2.0引入. IEnumberable使用的是LINQ to Object方式,将AsEnumerable()时对应的所有记录先加载到内存,再在此基础上再执行后面的Query. 本地数据源用IEnumerable<T>,并且查询…
最近在调研数据库查询时因使用IEnumerable进行Linq to entity的操作,造成数据库访问缓慢.此文讲述的便是IEnumerable和IQueryable的区别. 微软对IEnumerable的定义使用场景为Linq to Object,也就是涉及到内存操作时使用.而对IQueryable的定义使用场景为Linq to SQL(Entity). 因此,在执行Linq to SQL(Entity)的操作时,如果使用IEnumerable则会造成全表查询.如下图Code: 如此,在SQ…
IQueryable会将查询语法转化为SQL查询语句,去数据库查询:IEnumerable则查询整张表,加载到内存中,再进行筛选. 所以,当查询的数据量较大的时候,则使用IQueryable.反之,数据量较小,则使用IEnumerable,这样效率更高.…
前者可以延迟加载,即执行完后不马上执行数据库语句,用到再加载.…
public interface IEnumerable {     IEnumerator GetEnumerator(); }   public interface IEnumerator {     bool MoveNext();     void Reset();       Object Current { get; } }   IEnumerable和IEnumerator有什么区别?这是一个很让人困惑的问题(在很多forum里都看到有人在问这个问题).研究了半天,得到以下几点认识…
IEnumerable方式: public IEnumerable<WebManageUsers> GetWebManageUsers(ISpecification<WebManageUsers> specification) { var linq = base.GetEntities(specification).AsQueryable() .Include(i => i.WebManageUser_WebManageRoles) .AsQueryable(); //inc…
第一篇:https://www.cnblogs.com/zgqys1980/p/4047315.html: 第二篇:https://www.cnblogs.com/shenbing/p/5394228.html 第三篇:https://blog.csdn.net/ydm19891101/article/details/50969323 第四篇:http://www.igiven.com/?p=2804  (这篇最好,阐释最详尽,最透彻) 下面内容摘自上面第4篇博客,非本人原创: 那么什么时候用I…
IEnumerable: 从服务器处取回所有数据,在客户端根据过滤条件进行过滤再返回结果. IQueryable: 从服务器处进行过滤,直接返回过滤后的结果.…
在我看一个源程序的时候看到这个例子使用了IList<T>返回类型,因为上午刚刚总结过List<T>的详细用法,突然出现了IList<T>,感觉很奇怪,于是上网搜集了很多东西才明白了 它们的区别,刚开始仅仅是看文字说明,但是怎么都不明白,后来看到了一个实例,然后接着 看文字说明,豁然开朗啊,现在我先把这个实例程序写出来: using System; using System.Collections.Generic; using System.Linq; using Sys…
园里对这两个已经有很多文章作了深入的介绍,我总结些,当成笔记用. 一.具体判断用哪个上,如果是运行在本地内存中的,用IEnumerable,枚举该对象时,会立即反应查询结果. 如果是远程数据源,比如数据库,为优化查询,减少中间环节,要把多条语句先存放到表达式数里,等执行ToList方法时才会去真正调用迭代器GetEnumerator()取值,会去执行IQueryProvider中的Excute方法.得到最终结果,就是延时加载. 二.个人认为在不确认哪个更适用的情况下用IQueryable,因为从…
已经有很多人讨论过IList和List的区别,恩,我也赞同其中的一些观点,其实他们二者也是有优有劣的,看你着重用在哪个方面,先贴一下我赞同的意见,基本上也都是网友们总结的. 首先IList 泛型接口是 ICollection 泛型接口的子代,并且是所有泛型列表的基接口.它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅是作为集合数据的承载体,确实,IList可以胜任. 其次, IList <> 是在 .net framework 2.0里面才支持的 1. 不过,更多的时候,我们要…
原文: 探讨Ilist<>与List<> 首先要了解一点的是关于接口的基础知识: 接口不能直接实例化但是接口派生出来的抽象类可以实例化所有派生出来的抽象类都可以强制转换成接口的实例 第三条我解释一下:比如,IList <Class> IList11 =new List <Class>(); 也就是接口派生出来的抽象类可以转换为接口的实例,这也是常说的里氏替换原则(子类对象可以代替父类对象,但其父类对象不能代替子类对象) 首先,List<T>是一个…