请参见此处:.NET 2.0上的LINQ支持 创建一个新的控制台应用程 仅将System和System.Core保留为引用的程序集 为System.Core将Copy Local设置为true,因为它在...LINQ使用合成转换将查询转换为可执行代码.基本上,它将采用这样的代码: ? dim q = from x in xs where x > 2 select x*4; 并将其转换为如下代码: ?...dim q = xs.where(function(x) x > 2).select(function(x) x * 4); 对于3.5框架附带的LINQ功能,这些方法在IEnumerable或IQueryable...上实现为扩展方法(也有一堆方法也适用于数据集)....as IEnumerable(of R) 'do the transformation... end function IQueryable扩展方法将表达式树作为参数
转自 http://www.cnblogs.com/fly_dragon/archive/2011/02/21/1959933.html IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代...也就是说:实现了此接口的object,就可以直接使用foreach遍历此object; IQueryable 接口 它继承 IEnumerable 接口,而因为.net版本加入Linq和IQueryable....SkipT_Class>(3).TakeT_Class>(3); //因为启用了延迟加载机制,所以下面调用一下,才会真正去读取数据库...总结 IQueryable接口与IEnumberable接口的区别: IEnumerableT> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable...T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。
LINQ to SQL可以将查询表达式转换为SQL语句,然后在数据库中执行。相比LINQ to Object,则是将查询表达式直接转化为Enumerable的一系列方法,最终在C#内部执行。...LINQ to Object的数据源总是实现IEnumerableT>(所以不如叫做LINQ to IEnumerableT>),相对的,LINQ to SQL的数据源总是实现IQueryable将查询表达式转换为SQL语句并不保证一定可以成功。 IQueryable 理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列。...它令IQueryable和IEnumerable一样,拥有强大的查询能力。 AsQueryable方法将IEnumerableT>转换为IQueryableT>。...IQueryableT>继承自IEnumerableT>,所以对于数据遍历来说,它们没有区别。两者都具有延迟执行的效果。
可查询类型 LINQ之所以能够使用相同的语法操作不同的数据源,是因为和LINQ直接打交道的是可查询类型而非数据源,在LINQ中,直接或间接实现了IEnumerableT>接口的类型称为可查询类型, ....IQueryableT>继承自IEnumerableT>,是个标记接口。...可查询类型无需额外操作即可进行LINQ操作,若数据源在内存中不以可查询类型的形式存在,那么LINQ提供程序必须要先将数据源转换为可查询类型,如LINQ to XML将XML文件转换为可查询的XElement...扩展方法(又称为标准查询) System.Linq.Enumerable类和System.Linq.Queryable类,分别针对IEnumerableT>和IQueryableT>接口进行的扩展。...两个接口 在LINQ中,一个查询表达式被编译为表达式树或者委托,查询结果为IEnumerableT>类型则被编译为委托,查询结果是IQueryable或IQueryableT>类型则被编译为表达式树
下面我们来构建一个简单的IEnumerableT>扩展方法,用来处理当前集合中的数据是否可以进行数据的插入操作。...IQueryableT>并非IEnumerableT>对象,无法实时的做出处理然后将结果返回给下一个方法接着执行。那么它如何将片段性的执行方法串成一个整的、完整的查询?...那么在IQueryableT>中是通过执行Provider程序来获取数据,减少在一开始就获取数据的性能代价。...这幅图重点是IQueryableT>对象的连续操作,大致原理是每次执行扩展方法的时候都会构造一个新的IQueryableT>,本次的IQueryableT>对象将包含上次执行的表达式树,以此类推就形成了一颗庞大的表达式树...这是问题的重点,对扩展方法、链式编程不熟悉的朋友很难将source能串联到之前方法所返回的IQueryableT>对象上。
也就是说:实现了此接口的object,就可以直接使用foreach遍历此object; IQueryable 接口 它继承 IEnumerable 接口,而因为.net版本加入Linq和IQueryable....SkipT_Class>(3).TakeT_Class>(3); //因为启用了延迟加载机制,所以下面调用一下,才会真正去读取数据库...第一种:直接返回 IQueryable类型的查询,如下图所示: 第二种:在用分页查询之前先将其转换成 IEnumerable实际执行的sql如下图所示: 总结 IQueryable接口与IEnumberable...接口的区别: IEnumerableT> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryableT> 是将Skip ,take 这些方法表达式翻译成...T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。
任何静态类只要包含了至少一个扩展方法,它的元数据中也会应用这个attribute,任何一个程序集包含了至少一个符合上述特点的静态类,它的元数据也会应用这个attribute。...Enumerable大多数扩展是IEnumerableT>,Queryable大多数扩展是IQueryableT>。 ...2.Queryable类中的常用方法: (1).IQueryable接口: /// /// 提供对未指定数据类型的特定数据源的查询进行计算的功能。...{ /// /// 获取与 T:System.Linq.IQueryable"/> 的实例关联的表达式目录树。.../// /// /// /// 与此数据源关联的 T:System.Linq.IQueryProvider"/>
let’s offload all cases into this data structure: 由于我们只有3个条件,因此可以使用if来处理它们,但是由于我们假设将来需要扩展此方法,因此让我们将所有情况转移到此数据结构中...需要SelectorArgumentFunc才能将Format方法的所有参数转换为统一的形状,即ReturnFunc方法,该方法将返回完整的Expression 。 ...T> ReWriteT>(this IQueryableT> qu) { var result = new InterpolationStringReplacerT>().Visit(qu.Expression...请注意转换在IQueryable T>中具有IQueryable方法的qu.Provider.CreateQuery(result) 。 它广泛用于C#(请看IEnumerable T>接口!)...我们可以通过将T引入基类(通过协方差)来避免这种情况,但是它对接口方法设置了一些限制。
IQueryable不存储数据,它存储的是"配方" 这可能是最关键也最容易被误解的概念。当你针对数据库编写LINQ查询时,通常操作的是IQueryable。...许多开发者将其视为内存中的IEnumerable,但二者有本质区别: • IEnumerable是数据流,你可以遍历它 • IQueryable是表达式树,它是查询的"配方"或蓝图 当你对IQueryable...只有当你调用ToList()、First()或Count()等物化方法时,LINQ提供程序(如Entity Framework)才会将整个"配方"转换为优化后的SQL查询并发送到数据库。...public staticclassLinqExtensions { // 生成指定大小的数据块 public static IEnumerableIEnumerableT>> Batch...T>(this IEnumerableT> source, int size) { T[] bucket = null; var count = ;
如果一定要动态改变数组的长度,一种方法是将数组转换为ArrayList或List<T>,需要扩容时,内部数组将自动翻倍扩容 还有一种方法是用数组的复制功能。...IEnumerable<T>接口的集合类进行扩展;Queryable类,它针对继承了IQueryable<T>接口的集合类进行扩展。...LINQ to SQL引擎最终会将表达式树转化成为相应的SQL语句,然后在数据库中执行。 那么,到底什么时候使用IQueryable<T>,什么时候使用IEnumerable<T>呢?...简单表述就是:本地数据源用IEnumerable<T>,远程数据源用IQueryable<T>。...注意 在使用IQueryable<T>和IEnumerable<T>的时候还需要注意一点,IEnumerable<T>查询的逻辑可以直接用我们自己所定义的方法,而IQueryable<T>则不能使用自定义的方法
这一事实意味着该数据源可以用 LINQ 进行查询。 查询在 foreach 语句中执行,且 foreach 需要 IEnumerable 或 IEnumerableT>。...支持 IEnumerableT> 或派生接口(如泛型 IQueryableT>)的类型称为可查询类型。 可查询类型不需要进行修改或特殊处理就可以用作 LINQ 数据源。...下例中,Customers 表示数据库中的特定表,而查询结果的类型 IQueryableT> 派生自 IEnumerableT>。...但基本规则很简单:LINQ 数据源是支持泛型 IEnumerableT> 接口或从中继承的接口的任意对象。...但是,通过调用 ToList 或 ToArray,也可以将所有数据缓存在单个集合对象中。
但是,可能需要了解 2 个基本概念: 创建泛型集合类(如 ListT>)的实例时,需将“T”替换为列表将包含的对象类型。...泛型集合类支持 IEnumerableT>,正如非泛型集合类(如 ArrayList)支持 IEnumerable。 有关泛型的详细信息,请参阅泛型。...LINQ 查询中的 IEnumerable 变量 LINQ 查询变量被类型化为 IEnumerableT> 或者派生类型(如 IQueryableT>)。...看到类型化为 IEnumerable 的查询变量时,这只意味着执行查询时,该查询将生成包含零个或多个 Customer 对象的序列。...var 关键字指示编译器通过查看在 from 子句中指定的数据源来推断查询变量的类型。
这些方法中的大多数都作用于序列;其中序列指其类型实现 IEnumerableT> 接口或 IQueryableT> 接口的对象。 标准查询运算符提供包括筛选、投影、聚合、排序等在内的查询功能。...共有两组 LINQ 标准查询运算符,一组作用于类型 IEnumerableT> 的对象,另一组作用于类型 IQueryableT> 的对象。...这意味着可以使用静态方法语法或实例方法语法来调用它们。 此外,多个标准查询运算符方法作用于那些基于 IEnumerableT> 或 IQueryableT> 的类型外的类型。...对于在内存中集合上运行的方法(即扩展 IEnumerableT> 的那些方法),返回的可枚举对象将捕获传递到方法的参数。 在枚举该对象时,将使用查询运算符的逻辑,并返回查询结果。...与之相反,扩展 IQueryableT> 的方法不会实现任何查询行为,但会生成一个表示要执行的查询的表达式树。 源 IQueryableT> 对象执行查询处理。
IEnumerator IEnumerable vs. IQueryable Single method interface as IComparable vs....例如,可以从程序集a或程序集b中的所有类访问ClassA的PublicF。 类型和类型成员的访问修饰符, 类型(类、结构、枚举、接口、委托等)只能有内部和公共访问修饰符。...IQueryable 们都可以用于向前数据访问。 ? IEnumerable 以从内存集合中查询数据(比如,列表) 它在内存中加载数据(服务器端到客户端),同时从数据库查询数据,然后过滤客户端数据。...IQueryable 可以从内存之外查询数据(服务器端类、远程数据库、web服务) 它在数据库查询时过滤服务器端的数据,然后发送到客户端。...Use of stream 当数据量太大时,很难同时将整个数据加载到内存中。流用于从大文件中读取数据。您可以读取小块的数据,其中大文件被分解成小块。
当然如果数据来自远端,你还可以选择IQueryableT>,它不会把资料一股脑拉下来,而是做完所有的筛选之后,才ToList,把资料从远端下载下来。...参考:http://www.cnblogs.com/SieAppler/p/3501475.html 另外,我们可以通过返回IEnumerableT>而不是List或数组,来给予呼叫者最大的便利。...LINQ的额外开销在于将lambda表达式转换为委托的形式,而foreach不需要。虽然这一点点额外开销对于普通的情况基本可以忽略,但如果重复一千万次,则性能可能会有较为明显的差异。...是否需要在数据库上筛选数据,并运行LINQ语句?如果是的话,考虑返回IQueryableT>,并考察编译器构建的中间SQL语句。 数据规模是否巨大?...避免过早的ToList,返回IEnumerable/ IQueryableT>类型的巨大规模的数据。 是否需要重复极其多次运行相同的LINQ语句?考虑使用foreach或者PLINQ来优化性能。
所以我需要单独建立一个.NET3.0或.NET3.5的扩展作为以前程序集的一个扩展程序集,在使用的时候可以使用或者可以不使用,只有这样我们才能使用扩展方法或者其他的新的语法特性。...在使用IEnumerableT>和IQueryableT>之间的区别是什么?如何很好的理解这两者在LINQ的整个框架中的关系。...泛型的IEnumerableT>接口继承自IEnumerable接口,该接口表示可迭代的数据集合。Linq to object 也就是查询IEnumerableT>集合。...2.4.深入IQueryable、IQueryableT>、Queryable(LINQ to Provider框架的入口) IQueryable接口是提供给我们来实现自定义数据源用的,为了支持强类型的数据源集合我们直接使用...LINQ查询表达式最后是调用的链式查询方法,这些方法都是在静态类中定义好的,IEnumerableT>类型是直接的使用匿名方法调用执行,而IQueryableT>是使用人工解析的方式进行的,也就是自定义数据源
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。...使用查询语法,可以用最少的代码对数据源执行筛选、排序和分组操作。 可使用相同的基本查询表达式模式来查询和转换 SQL 数据库、ADO .NET 数据集、XML 文档和流以及 .NET 集合中的数据。...在 C# 中可为以下对象编写 LINQ 查询:SQL Server 数据库、XML 文档、ADO.NET 数据集以及支持 IEnumerable 或泛型 IEnumerableT> 接口的任何对象集合...这两种不同的形式在语义或性能上毫无差异。 查询表达式通常比使用方法语法编写的等同表达式更具可读性。 一些查询操作(如 Count 或 Max)没有等效的查询表达式子句,因此必须表示为方法调用。...查询表达式可被编译成表达式树或委托,具体视应用查询的类型而定。IEnumerableT> 查询编译为委托。 IQueryable 和 IQueryableT> 查询编译为表达式树。
LINQ查询方法一共提供了两种扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerableT>接口的集合进行扩展;Queryable类,针对继承了...IQueryableT>接口的集合进行扩展。...我们会发现接口IQueryableT>实际也是继承了IEnumerableT>接口的,既然这样微软为什么要设计出两套扩展方法呢?...那么,到底什么时候使用IQueryableT>,什么时候使用IEnumerableT>?...现在我们应该知道何时使用IEnumerableT>,何时使用IqueryableT>。
MSSQL 将截断字符串或二进制数据关键字: mssql 错误 将截断字符串或二进制数据 错误的信息提示大多是这样的: Java代码 1.Error!...[8152]System.Data.SqlClient.SqlException: 将截断字符串或二进制数据。语句已终止。 Error!...[8152]System.Data.SqlClient.SqlException: 将截断字符串或二进制数据。语句已终止。 主要原因就是你增加的数据类型与数据库中字段所定义的不符。...解决方法: 一个是修改数据库字段大小; 再一就是是加强数据强壮性,严格的输入判断。 防止添加的信息类型或者长度与数据库表中字段所对应的类型不符合。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
ExecuteQueryT>(this DataContext dataContext, IQueryable query, bool withNoLock) {...ExecuteQueryT>(this DataContext dataContext, IQueryable query) { DbCommand command...> public static class DataContextExtends { /// /// ExecuteQuery方法扩展,将对象以redader方式转换为实体...T>(this DataContext dataContext, IQueryable query) { return ExecuteQueryT>(dataContext...ExecuteQueryT>(this DataContext dataContext, IQueryable query, int pageIndex, int pageSize)