匿名类型: var data = new { name="小胡", age=27 }
编译器根据表达式自动推断数据类型,节省脑力
自动属性: public string Name { get; set; }
编译器自动生成字段,节省体力
Lambda表达式: (参数列表) => 函数体
其实就是 匿名方法,简单且无需复用的方法就用它
Linq查询: (from 别名 in 集合 where (别名.集合元素 满足条件) Orderby 别名.集合元素 select 别名.集合元素).Skip(10).Take(10);
或: 集合.Where(Lambda表达式).Select(Lambda表达式)
where 是横向查询(过滤行), select 是纵向查询(过滤列)
Orderby是排序, Skip(m)是跳过m条记录, Take(n)是取n条记录
相关查询语法:
group 别名 by 别名.集合元素 into 分组后的新集合: 分组其实就是归类,将记录分类压缩
查询结果.Distinct(): 重复的记录取一条
(集合A).Union(集合B): 取两个集合的并集
(集合A).Concat(集合B): 将两个集合合并
(集合A).Intersect(集合B): 取两个集合的交集
(集合A).Except(集合B): 集合A - 集合B
DataContext: Linq和DataBase的桥梁
1.通过Linq语法与数据库交互
2.执行SQL语句
3.以日志形式记录DataContext生成的SQL
延迟和预加载:
IQueryable query = from 别名 in 集合 select 别名.字段;
(query只是一个SQL描述, 在运行时执行SQL语句, 即:得到数据是有延迟的)
DataLoadOptions options = new DataLoadOptions();
options.LoadWith<A>(p=>p.B);
dataContext.LoadOptions = options;
dataContext.A.First();
(A和B是一对多的外键关系, Linq自动做一个左链接查询, 同时查出B, 即:预加载B的数据)