IEnumerable和IQueryable和Linq的查询】的更多相关文章

IEnumerable和IEnumerable 1.IEnumerable查询必须在本地执行.并且执行查询前我们必须把所有的数据加载到本地.而且更多的时候.加载的数据有大量的数据是我们不需要的无效数据.但是我们却不得不传输更多的数据.做更多的无用功.使用IEnumerable,所有对于IEnumerable的过滤,排序等操作,都是在内存中发生的.也就是说数据已经从数据库中获取到了内存中,只是在内存中进行过滤和排序操作. 2.IQueryable却总能只提供你所需要的数据.大大减少了数据的传输IQ…
序 学生时期,有过小组作业,当时分工一人做那么两三个页面,然而在前端差不多的时候,我和另一个同学发生了争执.当时用的是简单的三层架构(DLL.BLL.UI),我个人觉得各写各的吧,到时候合并,而他觉得应该把底层先写好,他好直接调用中间层的方法. 到出来工作之后,接触接口,想整理一下这个:接口到底是个什么概念呢? 需要说明一点的是,我这里说的接口,不是API那个接口,而是“暂时没实现”那个接口. 刚接触接口类型的时候,还不太熟练,看到返回接口类型的方法,总在奇怪,这个返回的对象怎么知道它取哪个实现…
class Program { static void Main(string[] args) { System.Diagnostics.Stopwatch stp = new Stopwatch(); stp.Start(); DBCommonContext db = new DBCommonContext(); );//.AsEnumerable(); , , )); //断点 foreach (var user in users_Now) {//断点 Console.WriteLine(u…
LinQ高级查询: 1.模糊查询(包含) Repeater1.DataSource = con.car.Where(r =>r.name.Contains(s)).ToList(); 2.开头 Repeater1.DataSource = con.car.Where(r =>r.name.StartsWith(s)).ToList(); 3.结尾 Repeater1.DataSource = con.car.Where(r =>r.name.EndsWith(s)).ToList();…
Linq主要分为 Linq to object .Linq to XML .Linq to sql(现在都用EF了). 针对object和sql,微软分别设计了两套接口IEnumerable.IQueryable(其中IQueryable继承与IEnumerable), 针对LINQ to OBJECTS时,使用Enumerable中的扩展方法对本地集合进行排序和查询等操作,查询参数接受的是Func<>.Func<>叫做谓语表达式,相当于一个委托.针对LINQ to SQL时,则使…
原文:https://www.cnblogs.com/WinHEC/articles/understanding-var-and-ienumerable-with-linq.html 使用LINQ从数据库和集合中查询数据时,我们使用IEnumerable和IQueryable进行数据处理. IQueryable继承自IEnumerable,因此IQueryable具有IEnumerable的所有功能,除此之外,它还具有自己的功能. 两者都有自己的重要性来查询和操作数据. 让我们看看二者的优势,并…
linq中查询列表的使用及iqueryable和list集合之间的转换 比如要查询一个货架集合,但是只需要其id和name即可,可以用以下方法:先写一个model类:CatalogModel(注意该类区别于linq根据数据库中货架表(catalog)的catalog类)伪代码: public class CatalogModel{    public int id;     public string name; } 然后: List catalogs = null; var lists = f…
LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> 接口或 IQueryable<T> 接口.标准查询运算符提供了包括筛选.投影.聚合.排序等功能在内的查询功能.        各个标准查询运算符在执行时间上有所不同,具体情况取决于它们是返回单一值还是值序列.返回单一值的方法(例如 Average 和 Sum)会立即执行.返回序列的方法会延迟查询…
标准查询运算符概述      “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法. 大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了 IEnumerable<T> 接口或 IQueryable<T> 接口. 标准查询运算符提供了包括筛选.投影.聚合.排序等功能在内的查询功能.      共有两组 LINQ 标准查询运算符,一组在类型为 IEnumerable<T> 的对象上运行,另一组在类型为 IQueryable<T> 的对象上…
Linq的排序一般是这样写的: query.OrderBy(x => x.Tel).Skip().Take(); 实际使用中排序字段可能是通过字符类型的参数来设置的,于是想这样实现: query.OrderBy(x=>x.GetType().GetField().Take(); 上面的写法是无法编译通过的,此路不通,于是找到一个order扩展类: using System; using System.Linq; using System.Linq.Expressions; using Syst…
 一. 关于LINQ       LINQ 英文全称是“Language-Integrated Query”,中文为“语言集成查询”,它是微软首席架构师.Delphi 之父和C# 之父——Anders Hejlsberg 提出的并由其团队着力打造的一组用于c#和Visual Basic语言的扩展,为 C# 和 Visual Basic 语言语法提供强大的查询功能.微软从2003年开始启动LINQ的开发,在VisualStudio2008中开始加入LINQ功能. LINQ提供的便利: 1)使用一种…
共有两组 LINQ 标准查询运算符,一组在类型为 IEnumerable<T> 的对象上运行,另一组在类型为 IQueryable<T> 的对象上运行.构成每组运算符的方法分别是 Enumerable 和 Queryable 类的静态成员.这些方法被定义为作为方法运行目标的类型的"扩展方法".这意味着可以使用静态方法语法或实例方法语法来调用它们. 大家应该还记得,上节我们说过linq查询要执行在clr上师把查询语句变成扩展方法来执行,这两套东西不仅返回类型不同连…
IEnumerable 和 IQueryable   共有两组 LINQ 标准查询运算符,一组在类型为 IEnumerable<T> 的对象上运行,另一组在类型为 IQueryable<T> 的对象上运行.构成每组运算符的方法分别是 Enumerable 和 Queryable 类的静态成员.这些方法被定义为作为方法运行目标的类型的“扩展方法”.这意味着可以使用静态方法语法或实例方法语法来调用它们. 大家应该还记得,上节我们说过linq查询要执行在clr上师把查询语句变成扩展方法来…
问题概述:    首先看下图,有客户表和客户负责人表关系是多对多,访问数据库使用的是EF所以这里我们开启了延迟加载,需求就是将每个客户的所有负责人逗号拼接显示在负责人这一栏位, 对你没看错需求就是这么简单如果是写sql也许我们会去用两个循环去做,问题是要用linq实现.…
连载目录    [已更新最新开发文章,点击查看详细] 标准查询运算符 是组成 LINQ 模式的方法. 这些方法中的大多数都作用于序列:其中序列指其类型实现 IEnumerable<T> 接口或 IQueryable<T> 接口的对象. 标准查询运算符提供包括筛选.投影.聚合.排序等在内的查询功能. 共有两组 LINQ 标准查询运算符,一组作用于类型 IEnumerable<T> 的对象,另一组作用于类型 IQueryable<T> 的对象. 构成每个集合的方…
连载目录    [已更新最新开发文章,点击查看详细] 本篇主要介绍标准查询运算符的常用运算功能. 01 对数据排序 排序操作基于一个或多个属性对序列的元素进行排序. 第一个排序条件对元素执行主要排序. 通过指定第二个排序条件,您可以对每个主要排序组内的元素进行排序. 下图展示了对一系列字符执行按字母顺序排序操作的结果. 下节列出了对数据进行排序的标准查询运算符方法. 方法 方法名 说明 C# 查询表达式语法 详细信息 OrderBy 按升序对值排序. orderby Enumerable.Ord…
避免 IEnumerable 以及 IQueryable 陷阱: IEnumerable示用Linq会先去数据库查询所有记录,然后再条件查询. IQueryable接口派生自IEnumerable,但表示数据库应该处理的查询.也就是说IQueryable会把查询的条件写入sql语句,而并不是先取出所有数据后再筛选. IQueryable接口的使用改变了对 LINQ 查询的评估方式,并确保筛选是由数据库服务器而不是由 MVC 应用程序执行的.只检索符合筛选条件的数据库中的数据,并且不会创建任何立即…
IQueryable接口定义如下: // 摘要: // 提供对未指定数据类型的特定数据源的查询进行计算的功能. public interface IQueryable : IEnumerable { // 摘要: // 获取在执行与 System.Linq.IQueryable 的此实例关联的表达式目录树时返回的元素的类型. // // 返回结果: // 一个 System.Type,表示在执行与之关联的表达式目录树时返回的元素的类型. Type ElementType { get; } //…
最近在调研数据库查询时因使用IEnumerable进行Linq to entity的操作,造成数据库访问缓慢.此文讲述的便是IEnumerable和IQueryable的区别. 微软对IEnumerable的定义使用场景为Linq to Object,也就是涉及到内存操作时使用.而对IQueryable的定义使用场景为Linq to SQL(Entity). 因此,在执行Linq to SQL(Entity)的操作时,如果使用IEnumerable则会造成全表查询.如下图Code: 如此,在SQ…
在使用EF的过程中,我们常常使用repository模式,本文就在repository层的返回值是IEnumerable类型还是IQueryable进行探讨. 阅读目录: 一.什么是Repository模式? 二.IEnumerable还是IQueryable的区别 三.实际检验IEnumerable和IQueryable的效率差别 四.总结 一, 什么是Repository模式? Repository是隔离在数据访问层和业务逻辑层之间的.它提供业务逻辑各种对象,使得业务逻辑代码不需要关心数据是…
因为项目需要使用Linq来查询数据,但是在多条件查询时,需要使用一大堆if(...!=string.empty)等判断条件感觉不是很优雅.网上搜索以下,大概找到了两种办法,一种是老外写的一个类,感觉用着麻烦:还有就是提供一扩展个方法,参数为某个类型,当调用该方法时,用反射去遍历这个类型的属性,再拿动态查询参数和属性值去比较,然后构建动态lambda表达式,这个也有缺陷,就是需要遍历类型的所有属性,而且构建lambda表达式只能构建==类型表达式,有局限性.所以自己琢磨了一个办法,调用时只需一行代…
七.聚合操作符 聚合函数将在序列上执行特定的计算,并返回单个值,如计算给定序列平均值.最大值等.共有7种LINQ聚合查询操作符:Aggregate.Average.Count.LongCount.Max.Min和Sum. 1. Aggregate Aggregate操作符对集合值执行自定义聚合运算.例如,需要列出所有产品类别清单,每个类别名称之间用顿号连接.以下的代码演示了这一过程: //方法语法 var q = db.Categories .Select(c => c.CategoryName…
本文介绍了LINQ标准查询操作符.没有这些操作符,LINQ就不会存在.本文为理解这些操作符的功能提供了很好的基础.了解它们将会很有帮助,因为LINQ的各种Provider都是基于这些操作符来完成各自丰富的功能. 一.投影操作符 1. Select Select操作符对单个序列或集合中的值进行投影.下面的示例中使用select从序列中返回Employee表的所有列: using (NorthwindDataContext db = new NorthwindDataContext()) { //查…
EF(EntityFrameWork) ORM(对象关系映射框架/数据持久化框架),根据实体对象操作数据表中数据的一种面向对象的操作框架,底层也是调用ADO.NET ASP.NET MVC 项目会自动导入MVC程序集,因为默认.NET环境(GAC)中没有这个程序集 create database MyFirstEF on primary ( name='MyFirstEF.mdf', --修改为自己电脑上SQL DB路径 filename='E:\ProgramMSSQLServerDB\MyF…
这篇博客将介绍IEnumerable和IQueryable之间的区别. 1. IQueryable是继承自IEnumerable接口的.所以IEnumerable能做的,IQueryable都能做. 2. 先看代码,然后再讲两者之间的区别. using (NerdDinnerDataContext context = new NerdDinnerDataContext()) { IEnumerable<Dinner> dinners = context.Dinners; IEnumerable…
最近在使用MongoDB的时候,发现查询很慢,一个根据Id查询的语句竟然用了50秒,debug了一下,没发现什么大问题,但是另一个查询的语句只用了2秒,对比了一下,发现50s的那个语句使用的IEnumerable查询,而2s的那个语句用的是IQueryable查询,网上找了一下资料,找到了原因:IEnumerable与IQueryable查询机制的不同. IEnumerable:把数据取到内存中,在内存中查询 IQueryable:拼接好sql,直接从数据库中查询 当数据量大的时候,结果一目了然…
本文介绍了LINQ标准查询操作符.没有这些操作符,LINQ就不会存在.本文为理解这些操作符的功能提供了很好的基础.了解它们将会很有帮助,因为LINQ的各种Provider都是基于这些操作符来完成各自丰富的功能. 推荐大家下载本文的PDF进行阅读,可以方便的使用书签来阅读各个方法,而且代码中的关键字是高亮显示的.pdf版下载地址 http://www.jb51.net/books/24738.html 一.投影操作符 1. Select Select操作符对单个序列或集合中的值进行投影.下面的示例…
什么使用IQueryable<T> 查询返回类型为什么用IQueryable<T>,而不用 IEnumerable<T>类型? IQueryable接口实现IEnumerable接口,IQueryable接口拥有IEnumerable的所有功能. 两者的区别可以从以下例子看出端倪: IEnumerable<T> result = (from t in context.Table order by t.Id select c).AsEnumerable().T…
linq的延时执行是指枚举时才去一个个生成结果元素. 流式处理是linq延时执行的一种,在生成元素前不需要获取所有源元素,只要获取到的源元素足够计算时,便生成结果元素. 流式处理的标准查询运算符返回值通常是个普通序列. ToAsEnumerable namespace ConsoleApp4 { class Program { static void Main(string[] args) { Clump<string> fruitClump = new Clump<string>…
//Linq中查询一个表中指定的几个字段: ); // FindAllItems()为查询对应表的所有数据的方法: // Where 里面为查询条件 // Select 为查询的筛选条件 new{} 里面就是要查询的字段 //Distinct() 为去除重复的查询 //ToList() 为将查询转换为List<> //OrderByDescending() 表示排序字段及排序方法(倒序排列) //Take(N) 表示查询前N条数据:…