Linq学习笔记(二)c#3.0语言的linq增强功能
c#3.0的新功能
Labbda表达式:
lambda表达式提供了便捷的语法来指定一个算法。
lambda表达式可以写成一个逗号分隔的参数列表,后面加一个lambda操作符,再后面是一个表达式或声明函数,如果有多个输入参数,则使用圆括号包含输入参数。
在c#中lambda表达式可以写为”=>”
例如:
int[] nums={1,2,3,4,5,6,7,8,9,10};
调用通用库筛选器方法
int oddnums=Common.FilterArrayOfInts(nums,Application.IsOdd);
调用匿名方法
int oddnums=Common.FilterArrayOfInts(nums,delegate(int i){return{(i&1)==1;}});
使用lambda表达式
int oddnums=Common.FilterArrayOfInts(nums,i=>((i&1)==1));
如果算法需要重用,则可以使用命名方法。
lambda表达式则经常作为参数传递到linq查询操作符的函数调用中。
表达式树;
表达式树是一种有效的数据表达方式,可以以树的形式显示查询操作符的lambda表达式。这些表达式树种的所有数据表达方式是可以同时进行计算的,因此可以针对一种数据源建立和执行单个查询。
例如:
int[] nums={1,2,3,4,5,6,7,8,9,10};
IEnumerable<int> numsLessThanFour=nums.where(i=>i<4).OrderBy(i=>i);
关键字变量var、对象和集合初始化,以及匿名类型:
var 关键字通过变量的初始化来因此推断变量的类型。var关键字声明的变量,必须有一个初始化的程序。
使用var关键字可以继续拧静态类型的检查。
对像和集合的初始化表达式:
对象的初始化功能允许开发者在初始化期间为可以公开访问的成员指定初始化值和类的属性。
例如:
public class Address
{
public string address;
pub string city;
}
Address add=new Address{address=”test”,city=”zs”};
集合初始化允许开发者为一个集合指定初始化值。
例如:
List<string> persidents=new List<string>{“a”,”b”,”c”};
匿名类型没有名称,并且是由编译器根据被实例化的对象的初始值来生成。
例如:
var add=new Address{address=”test”,city=”zs”};
扩展方法(Extension Method):
扩展方法是一个静态类的静态方法,开发者可以像调用其他类的实例方法那样调用扩展方法。
扩展方法只能在静态类中声明.
例如:
namespace Netsplore.Utilities
{
public static class StringConversions
{
public static double ToDouble(this string s)
{
return Double.Parse(s);
}
public static bool ToBool(this string s)
{
return Boolean.Parse(s);
}
}
}
常规对象实例方法的优先级在其声明形式与调用函数的声明性质匹配时候高于扩展方法。
分部方法(Partial Method):
分部方法只能存在于分部类中。
分部方法是指那些方法原型或定义都是在分部类中指定,但是没有在该分不累的相同声明中提供方法的实现的方法。
分部方法可以让使用分部类范例来扩这方法的其他开发者编写这些分部方法的代码。
查询表达式:
- 查询表达式必须以from语句开始。
- 查询表达式的后面部分可能包含0个或者多个from、let或where语句,from语句是一个代码发生器,可以声明一个或多个枚举变量来枚举一个徐磊或多个徐磊的连接。let语句可以引入一个变量并为该变量赋值,where语句可以从一个或多个序列的连接中筛选元素,并将筛选的元素放到输出序列中。
- 查询表达式接下来可能会有一个orderby语句,该语句包含了一个或多个排序字段,以及可选择的排序方向,排序方向可以按升序,或降序排列。
- 查询表达式接下来必须有一个select或group语句。
- 查询表达式接下来会有一个可选的附件语句,附加语句可能是into语句、零个或多个join语句 into语句直接将查询结果暑促到一个假定的输出序列中。
- 查询表达式允许linq查询以类似于sql的性质进行表达。
例如:
string[] names={“aaa1”,“aaaa1”,“aaaaa1”,“aaaaaa1”,“aaaaaaa1”,“aaaaaaaa1”,“aaaaaaaaaa1”,};
使用标准句点福哈语法的查询操作:
IEnumerable<string> sequence=names
.where(n=>n.length<6)
select(n=>n);
使用查询表达式:
IEnumerable<string> sequence=from n in names
where n.length<6
select n;