LINQ学习笔记(二)
LINQ语法基础
1 C#3.0新的语言机制
(1)隐形局部变量
(2)对象初始化器
(3)匿名类型
(4)隐形数组
(5)Lambda表达式
(6)查询表达式
(7)扩展表达式
(8)表达式树
2 使用var创建隐形局部变量
C#3.0使用var关键字声明变量。var关键字指示编译器能够变量初始化表达式判断变量的类型,即是用var关键字声明变量时,隐藏了该变量的类型。
(1)var关键字声明声明的变量必须包含一个初始化器,初始化器必须为一个表达式。且初始化器不能包含自身对象;
(2) var关键字声明的变量的初始化值不能为null;
(3) 不能在同一语句中初始化多个隐式类型的变量
3 对象和集合初始化器
对象初始化器可以不调用类的构造函数就能够创建类的实例,并设置该实例的属性的值。
集合初始化器用来初始化一个集合,它由一系列元素组成,并封闭于"{"和"}"标记内
(1)对象初始化器
UserInfo user=new UserInfo
{
ID=2008,
Username="This is a book",
AliasName=new List<string>{"ASP.NET"},
Email="asp.net@web.com",
RoleID=2
};
(2) 集合初始化器
List<int> number=new List<int>{0,1,2,3,4,5,6,7,8,9};
集合初始化器调用ICollection<T>.Add()方法将初始化器的值列表中的每一 个元素添加到集合中,并完成初始化操作。
List<int> numbers=new List<int>();
numbers.Add(0);
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);
numbers.Add(4);
numbers.Add(5);
4 创建匿名类型的对象
var role=new {ID=1,RoleName="Admin"};
5 创建隐形数组
隐形数组使用var关键字和数组初始化器创建。数组初始化器中必须存在一种数 据类型(不能为null),使得数组初始化器中的所有元素都能够隐式转换为该类 型的对象
var numbers =new[]{0,1,2,3,4,5,6,7,8,9}
下面的代码将产生错误
var errors=new[]{"he,"she","it","1","2"};
6 Lambda表达式
Lambda表达式是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托 和表达式目录树类型。
Lambda表达式的组成:
输入参数(如果存在)
Lambda运算符(=>)
表达式(或语句块)
(input parmeters) => expression
x => x * x;
(1)Lambda表达式的参数
没有参数时可以省略括号;有一个参数时可以省略;一个以上参数时必须 加括号
(2)Lambda表达式的语句
Lambda运算符的右边不但可以是一个表达式,还可以是语句块
(3) Lambda表达式转换
每一个Lambda表达式都可以转换为相应的函数
7 查询表达式
查询表达式由一组用类似于SQL或XQuery的声明性语法编写的字句组成
(1) 查询表达式基础
查询表达式包含8个基本子句:from、select、group、where、orderby join和let子句
(2) 查询表达式的基本子句(略)