随笔分类 - .NET
摘要:Set 运算LINQ 中的 Set 操作是指根据相同或不同集合(或集)中是否存在等效元素来生成结果集的查询操作。方法方法名说明C# 查询表达式语法Visual Basic 查询表达式语法更多信息Distinct从集合移除重复值。不适用。DistinctEnumerable.DistinctQueryable.DistinctExcept返回差集,差集是指位于一个集合但不位于另一个集合的元素。不适用。不适用。Enumerable.ExceptQueryable.ExceptIntersect返回交集,交集是指同时出现在两个集合中的元素。不适用。不适用。Enumerable.IntersectQu
阅读全文
摘要:XML概述可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML ...
阅读全文
摘要:JSON概述 JSON(Java Script Object Notation)JS对象符号,通常JSON和XML是二选一的,JSON的数据格式很类似于JavaScript的对象{ "pets": { "name": "Jeffrey", "species": "Giraffe" ...
阅读全文
摘要:数据排序排序操作按一个或多个特性对序列的元素进行排序。 第一个排序条件对元素执行主要排序。 通过指定第二个排序条件,可以对各个主要排序组中的元素进行排序。方法方法名说明C# 查询表达式语法Visual Basic 查询表达式语法更多信息OrderBy按升序对值进行排序。orderbyOrder ByEnumerable.OrderByQueryable.OrderByOrderByDescending按降序对值进行排序。orderby … descendingOrder By … DescendingEnumerable.OrderByDescendingQueryable.OrderByDe
阅读全文
摘要:标准查询运算符概述“标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法。 大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了 IEnumerable 接口或 IQueryable 接口。 标准查询运算符提供了包括筛选、投影、聚合、排序等功能在内的查询功能。共有两组 LINQ 标准查询运算符,一组在类型为 IEnumerable 的对象上运行,另一组在类型为 IQueryable 的对象上运行。 构成每组运算符的方法分别是 Enumerable 和 Queryable 类的静态成员。 这些方法被定义为作为方法运行目标的类型的“扩展方法”。 这意味着可以使用静态方法语法或实
阅读全文
摘要:LINQ 查询语法与方法语法 通过使用 C# 3.0 中引入的声明性查询语法,介绍性 LINQ 文档中的多数查询都被编写为查询表达式。 但是,.NET 公共语言运行时 (CLR) 本身并不具有查询语法的概念。 因此,在编译时,查询表达式会转换为 CLR 确实了解的内容:方法调用。 这些方法称为“标准查询运算符”,它们具有如下名称:Where、Select、GroupBy、Join、Max、Average 等。可以通过使用方法语法而非查询语法来直接调用这些方法。通常我们建议使用查询语法,因为它通常更简单、更易读;但是方法语法和查询语法之间并无语义上的区别。 此外,一些查询(如检索匹配指定条件的.
阅读全文
摘要:LINQ 查询操作中的类型关系若要有效编写查询,您应该了解完整的查询操作中的变量类型是如何全部彼此关联的。 如果您了解这些关系,就能够更容易地理解文档中的 LINQ 示例和代码示例。 另外,还能了解在使用 var 隐式对变量进行类型化时的后台操作。LINQ 查询操作在数据源、查询本身及查询执行中是强类型的。 查询中变量的类型必须与数据源中元素的类型和 foreach 语句中迭代变量的类型兼容。 此强类型保证在编译时捕获类型错误,以便可以在用户遇到这些错误之前更正它们。不转换源数据的查询 下图演示不对数据执行转换的 LINQ to Objects 查询操作。源包含一个字符串序列,查询输出也是一.
阅读全文
摘要:反射 反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。获取变量类型int i = 42;System.Type type = i.GetType();加载程序集System.Reflection.Assembly o = System.Reflection.Assembly.Load("mscorlib.dll");适用场景需要访问程序元数据的属性检查和实例化程序集中的类型在运行时构建新类型,使用 System
阅读全文
摘要:解决方案 通过反射的方式获取类型中的所有属性。引用命名空间 using System.Reflection;实体类 public class User { private string id; public string Id { get { return id; } set { id = value; } } private string name; public string Name { get { return name; } set { name = value; } } }获取方法 private Property...
阅读全文
摘要:使用 LINQ 进行数据转换语言集成查询 (LINQ) 不仅可用于检索数据, 而且还是一个功能强大的数据转换工具。 通过使用 LINQ 查询,您可以将源序列用作输入,并采用多种方式修改它以创建新输出序列。 您可以通过排序和分组来修改序列本身,而不必修改元素本身。但是,LINQ 查询的最强大功能可能在于它能够创建新类型。 这一功能在 select 子句中实现。 例如,可以执行下列任务:将多个输入序列合并到具有新类型的单个输出序列中。创建其元素只包含源序列中的各个元素的一个或几个属性的输出序列。创建其元素包含对源数据执行的操作结果的输出序列。创建不同格式的输出序列。将多个输入联接到一个输出序列 .
阅读全文
摘要:获取数据源 在 LINQ 查询中,第一步是指定数据源。像在大多数编程语言中一样,在 C# 中,必须先声明变量,才能使用它。在 LINQ 查询中,最先使用 from 子句的目的是引入数据源 (customers) 和范围变量 (cust)。范围变量类似于 foreach 循环中的迭代变量,但在查询表达式中,实际上不发生迭代。执行查询时,范围变量将用作对 customers 中的每个后续元素的引用。因为编译器可以推断 cust 的类型,所以您不必显式指定此类型。其他范围变量可由 let 子句引入。var queryAllCustomers = from cust in customers ...
阅读全文
摘要:LINQ 语言集成查询 (LINQ) 是 Visual Studio 2008 中引入的一组功能,它在对象领域和数据领域之间架起了一座桥梁。可为 C# 和 Visual Basic 语言语法提供强大的查询功能。 LINQ 引入了标准、易学的数据查询和更新模式,该技术可以扩展为几乎支持任何类型的数据存储。Visual Studio 包含 LINQ 提供程序的程序集,借助这些程序集,就能将 LINQ 用于 .NET Framework 集合、SQL Server 数据库、ADO.NET 数据集和 XML 文档。LINQ应用场景LINQ to Object:针对数组和集合LINQ toXML:针对.
阅读全文
摘要:Attributes 特性 公共语言运行时允许添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。定制特性attribute,本质上是一个类,其为目标元素提供关联附加信息,并在运行期以反射的方式来获取附加信息。attibute实例,是在编译期进行初始化,而不是运行期。定制特性类型,必须直接或者间接的继承自System.Attribute类,而且该类型必须有公有构造函数来创建其.
阅读全文
摘要:Dispose 类型的 Dispose 方法应释放它拥有的所有资源。它还应该通过调用其父类型的 Dispose 方法释放其基类型拥有的所有资源。该父类型的 Dispose 方法应该释放它拥有的所有资源并同样也调用其父类型的 Dispose 方法,从而在整个基类型层次结构中传播此模式。若要确保始终正确地清理资源,Dispose 方法应该可以被多次调用而不引发任何异常。Dispose 方法应该为它处置的对象调用 GC.SuppressFinalize 方法。如果对象当前在终止队列中,GC.SuppressFinalize 防止其 Finalize 方法被调用。请记住,执行 Finalize 方法.
阅读全文
摘要:强引用 如果应用程序的代码可以访问一个正由该程序使用的对象,垃圾回收器就不能收集该对象, 那么,就认为应用程序对该对象具有强引用。要建立强引用并重新使用该对象,请将 WeakReference 的 Target 属性强制转换为该对象的类型。如果 Target 属性返回 null,则表示对象已被收集;否则,您可继续使用该对象,因为应用程序已重新获得了对它的强引用。弱引用弱引用允许应用程序访问对象,同时也允许垃圾回收器收集相应的对象。如果不存在强引用,则弱引用的有限期只限于收集对象前的一个不确定的时间段。使用弱引用时,应用程序仍可对该对象进行强引用,这样做可防止该对象被收集。但始终存在这样的风险.
阅读全文
摘要:GC 垃圾回收.NET Framework 的垃圾回收器管理应用程序的内存分配和释放。每次您使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间。但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。在内存大于 2GB 的服务器中,可能需要在 boot.ini 文件中指定 /3GB 开关,以避免当内存仍可供系统使用时出现明显的内存不足问题。当使用非
阅读全文
摘要:泛型 泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。例如,通过使用泛型类型参数 T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险。 使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。泛型最常见的用途是创建集合类。可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。可以对泛型类进行约束以访问特定数据类型的方法。关于泛型数据类型中使用的类型的信息可在运行时通过反射获取。public class Gen..
阅读全文
摘要:接口 接口是一组抽象成员的集合,表示某个类或结构可以选择去实现的行为,描述的是可属于任何类或结构的一组相关功能。接口方法的实现是在实现接口的类中完成的,实现接口的类可以显式实现该接口的成员,显式实现的成员不能通过类实例访问,而只能通过接口实例访问。接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型。 它不能包含静态成员。 接口成员是自动公开的,且不能包含任何访问修饰符。关键字interface可包含成员方法属性索引器事件备注接口类似于抽象基类:实现接口的任何非抽象类型都必须实现接口的所有成员。不能直接实例化接口。接口不包含方法的实现。类和结构可继承多个接口,但继承的基类必须放在第一.
阅读全文
摘要:Lambda概述 lambda 表达式是一个可用于创建委托或表达式树类型的匿名函数。 通过使用 lambda 表达式,可以可作为参数或返回编写本地函数,该函数调用的值。 Lambda 表达式用于编写 LINQ 查询表达式特别有用。 若要创建 lambda 表达式,则在 lambda 运算符 =>的左侧指定输入参数 (如果有),因此,您放置表达式或语句在另一端块。 例如,lambda 表达式 x => x * x 指定名为 x 的参数并返回 x 的值计算的。=> 运算符具有与赋值运算符 (=) 相同的优先级,并且是右结合运算符。Lambda 在基于方法的 LINQ 查询中用作标
阅读全文
摘要:public static void CreateExcel(DataSet ds) { string filename = DateTime.Now.ToString("yyyyMMddHHmmssff") + ".xls"; HttpContext.Current.Response.Conten...
阅读全文