随笔分类 - LINQ
摘要:View Code var intList = new int[] { 1, 2, 3, 4, 5, -1, -2 };Console.WriteLine("Where");foreach (var i in intList.Where(x => x <= 3)) Console.WriteLine(i);Console.WriteLine("TakeWhile");foreach (var i in intList.TakeWhile(x => x <= 3)) Console.WriteLine(i);Where123-1-2
阅读全文
摘要:MSDN定义:扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。 对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。 仅当您使用 using 指令将命名空间显式导入到源代码中之后,扩展方法才位于范围中。在代码中,可以使用实例方法语法调用该扩展方法。 但是,编译器生成
阅读全文
摘要:由于微软提供的更新程序使用不方便,所以又写了此程序。此程序是本人一年前所写的一段程序,当时在开发一个CS版本报价系统,当时由于开发过程仓促,代码可能有点不是太规范此程序编译后只有一下AutoUpdate.exe文件与一个配置文件UpdateList.xml,主要通过本地程序与服务端程序文件的版本号来升级与更新本地程序文件。UpdateList.xml文件内容如下:<?xml version="1.0" encoding="gb2312"?><AutoUpdater> <description>Application a
阅读全文
摘要:JoinJoin方法:原型public static IEnumberable<V> Join<T,U,K,V>( this IEnumberable <T> outer, IEnumberable<U> inner, Func<T,K> outerKeySelector, Func<T,U,V> resultSelector);
阅读全文
摘要:Chapter 4 延迟操作1.引用命名空间using System.Linq;using System.Collections;using System.Collections.Generic;using System.Data.Linq;2.Where方法WHere 方法的作用是根据查询条件过滤结果。where 方法有两个原型:第一个:public static IEnumerable<T> Where<T>(this IEnumerable<T> source,Func<T,bool> predicate);该原型的作用是通过输入一个可以进
阅读全文
摘要:Func Delegates(函数 委托)Func Delegae的声明:public delegate TR Func<TR>();public delegate TR Func<T0, TR>(T0 a0);public delegate TR Func<T0, T1, TR>(T0 a0, T1 a1);public delegate TR Func<T0, T1, T2, TR>(T0 a0, T1 a1, T2 a2);public delegate TR Func<T0, T1, T2, T3, TR>(T0 a0, T1
阅读全文
摘要:Part 2Chapter 3LINQ to Objects overviewIEnumberalbe<T> Sequences,and the standard QueryIEnumberable<T>, 发音为“I enumerable of T”,IEnumberalbe 是C#中所有泛型集合类必须继承的接口。这个接口允许遍历每个集合的元素。序列的定义就是实现了IEnumerable<T>接口的集合。所有的标准查询语句都是扩展方法,在System。Linq.Enumberalbe命名空间中,静态类,属性中第一个参数是IEnumberable<T&
阅读全文
摘要:查询表达式1.标准点式语法 和 标准表达式法标准表达式法接近于SQL语法,点式语法则更便于使用。C#语言并没有要求我们必须使用哪种方式,很显然,点式语法是更好的选择。在标准表达式法中,Select放在了语句的最后,这样做的原因是为了是方便VS的智能提示。2.点式语法中常用的查询操作:Where,Select,SelectMany,Join,GroupJoin,GroupBy,OrderBy,ThenBy,OrderByDescending,ThenByDescending.3.查询表达式语法:1.查询表达式必须以from开头2.查询表达式必须包含0个或多个from,let,或者 Where从句
阅读全文
摘要:Lambad表达式树:Lamabda表达式树在编译过程中,有两种方式:如果表达式的第一个参数声明为IEnumberable<T>类型,编译器会编译成IL中间代码,而当扩展方法继承自IQueryable<T>时,编译器会生成一个表达式树。var 关键字,匿名类型,对象初始化var关键字,允许我们在不知道变量类型的情况下初始化变量 如:var a = new {name='张三',sex='男'};但是初始化是必须的var a ;//编译会出错对象初始化:传统的方式是先 new 一个对象 再对对象初始化,例如Address address =
阅读全文
摘要:概述在.NET Framework 3.5中提供了LINQ 支持后,LINQ就以其强大而优雅的编程方式赢得了开发人员的喜爱,而各种LINQ Provider更是满天飞,如LINQ to NHibernate、LINQ to Google等,大有“一切皆LINQ”的趋势。LINQ本身也提供了很好的扩展性,使得我们可以轻松的编写属于自己的LINQ Provider。本文为打造自己的LINQ Provider系列文章第一篇,主要介绍表达式目录树(Expression Tree)的相关知识。认识表达式目录树究竟什么是表达式目录树(Expression Tree),它是一种抽象语法树或者说它是一种数据结
阅读全文
摘要:第2章 C# Language Enhancements For LINQC# 语言新特性1.Lambda 表达式2.表达式树3.var 关键字,对象 和 集合初始化 ,匿名类4.拓展方法5.部分方法6.查询表达式一、Lambda表达式Lambda表达式的引入是为了简化匿名方法的使用,而匿名方法又是为了简化委托代码写在别处,复用率又不高的代码段。书中的例子:使用命名方法(Named Methods)在C# 2.0之前,可以使用委托(delegate)来完成这项工作。比如考虑这样一个应用,对数组元素按照一定的规则进行过滤,对于通用模块,可以写成下面的样子:publicclassCommon{p.
阅读全文
摘要:1.LINQ只能用来查询数据吗?Answer:NO,LINQ还可以用来对数据进行转换。例如把一个intl类型的数组转换成string类型,传统的方法可能需要写一个新的方法,循环遍历该数组中的每一个值,逐一进行转换。而LINQ就可以方便高效地转换。2.Var关键字的使用当变量的类型只有在编译的时候才能确定的情况下,我们可以使用var关键字来代替我们不明确的变量类型。3.Cast 或 OfType 方法的用法LINQ只能应用在实现了IEnumberalbe<T>接口的对象中,对于传统C#集合类型,可以使用Cast(OfType)方法对对象进行转换。example:ArrayList a
阅读全文
摘要:查询表达式(LINQ)简介LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性。已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知、静态类型等强类型语言的好处。并且它同时还使得查询可以方便地对内存中的信息进行查询而不仅仅只是外部数据源。LINQ定义了一组标准查询操作符用于在所有基于.NET平台的编程语言中更加直接地声明跨越、过滤和投射操作的统一方式,标准查询操作符允许查询作用于所有基于IEnumerable<T>接口的源,并且它还允许适合于目标域或技术的第三方特定域操作符来扩大标准查询
阅读全文
摘要:之前一直在按照书中的步骤使用,感觉上还不是很清晰,今天总结了一下使用方法:第一步:新建一个控制台项目:创建实体类Productclass Product { public int ProductID { get; set; } public string Name { get; set; } public string Description { get; set; } public string Category { get; set; } public decimal Price { get; set; } ...
阅读全文
摘要:在学习MVC3的单元测试的时候碰到一个奇怪的事情:[TestClass] public class MyPriceReducerTest { [TestMethod] public void All_Prices_Are_Changed() { FakeResponsitory repo = new FakeResponsitory(); decimal reductionAmount = 10; IEnumerable<decimal> prices = repo.GetP...
阅读全文
摘要:The difference between the two operators is that the Cast operator will attempt to cast everyelement in the collection to the specified type to be put into the output sequence. If there is a type in thecollection that cannot be cast to the specified type, an exception will be thrown. The OfType oper
阅读全文