LinQ to SQL
LinQ - 集成化查询语言。
LinQ to SQL ——查询SQLServer数据库
LinQ to Object —— 查询内存中的集合
ORM思想:O - R - M
- Object 对象——实体类
- Relation 关系数据库——数据库中的表
- Mapping 映射——把类和表;字段和列对应
LinQ生成实体类的结构:
1.生成一个DataContext类。相当于程序内存和硬盘数据库之间的桥梁。
2.生成一系列的实例类,与表是一一对应的。
3.每个实体类中都有与表中列相应的属性(值类型的属性都是可以为空的类型bool? int? double?)
4.数据库中表和表之间的关联关系,被转化成内存中类中的成员变量。
一、增
1.造对象,接收数据
2.告诉context提交的时候如何操作
3.context提交
例:
//创建内存对象与数据库之间的桥梁
MyDBDataContext context = new MyDBDataContext();
//第一步:造实体对象
Info data = new Info();
data.Code = "p009";
data.Name = "李四光";
data.Sex = true;
data.Nation = "n001";
data.Birthday = new DateTime(1890, 3, 15);
//第二步:跟Context说一下,提交的时候对它执行插入操作
context.Info.InsertOnSubmit(data);
//第三步:提交
context.SubmitChanges();
二、删
1.从数据库中找操作对象出来(注:找出来的是个集合,可以用first()取出第一个)
2.告诉context,提交的时候,执行删除操作
3.context提交
例:
//创建内存对象与数据库之间的桥梁
MyDBDataContext context = new MyDBDataContext();
//第一步:找出要删除的对象。
//var query = from p in context.Info where p.Code == "p009" select p;
var query = context.Info.Where(p => p.Code == "p009");
Info data = query.First();
//第二步:跟Context说一下,提交的时候把这个对象给删掉。
context.Info.DeleteOnSubmit(data);
//第三步:提交
context.SubmitChanges();
三、改
1.从数据库中找出对象来。(注:找出来的是个集合,可以用first()取出第一个)
2.对对象的值进行修改。
3.提交,送回数据库去。
注:无需告诉context如何操作,直接提交
例:
//创建内存对象与数据库之间的桥梁
MyDBDataContext context = new MyDBDataContext();
//第一步:从数据库找出对象来
var query = context.Info.Where(p=>p.Code == "p009");
Info data = query.First();
//第二步:改
data.Name = "刘文";
data.Sex = false;
//第三步:提交
context.SubmitChanges();
四、查
1. LINQ语句写法(from p in context.Info where p.Sex==true select p;)
2. 扩展方法(context.Info.Where(p=>p.Sex==true);)
1)基本条件查询:
等值: p.属性名==value
不等值: p.属性名!=value
逻辑与: p.属性名==value && p.属性名==value
逻辑或: p.属性名==value || p.属性名==value
2)模糊查询:
a.以..开头
StartsWiths
b.以..结尾
EndsWiths
c.包含
Contains(value)
d.指定位置
Substring(index,length) ==value
e.链接查询和子查询有语法,但很少写
直接可使用对象之间的关系对象进行操作,Linq会自动为我们生成出相应的连接语句或子查询语句。
3)排序:
LinQ语句:
orderby 属性名 ——升序
orderby 属性名 descending ——降序扩展方法:
OrderBy()
OrderByDescending()
4)统计函数:
LinQ语句:
** //把LinQ语句括起来,调用相应的方法即可 **
扩展方法:
Count()
Sum(p=>p.属性名)
Average(p=>p.属性名)
Max(p=>p.属性名)
Min(p=>p.属性名)
5)分页查询:
skip(要跳过的条数).take(要取出来的条件)
6)集合操作:交、并、差
var q1 = context.Info.Where(p => p.Nation != "n001");
var q2 = context.Info.Where(p => p.Sex == true);
交集:var query = q1.Intersect(q2);
并集:var query = q1.Union(q2);
差集:var query = q1.Except(q2);