1.LINQ to SQL概述
1)
LINQTO SQL
是
LINQ
中最重要的一个组建,为
.NET Framework3.5
及以上版本所支持,它可以为关系数据库提供一个对象模型。
2)
LINQTO SQL
最重要的一个功能就是为数据库创建一个对象模型(由基于
.NET
框架的类组成),并将该对象模型映射到数据库中的相应对象。
2.使用vs2010 创建DBML
3.数据上下文
DataContext
又称为数据上下文,它为
LINQ to SQL
提供操作数据库的入口。使用
LINQ to SQL
操作数据库,首先需要为该数据库创建一个继承自
DataContext
类的自定义的数据上下文类。
执行查询语句的
ExecuteQuery
()
方法
执行非查询语句的
ExecuteCommand
()
方法
提交更改到数据库的
SubmitChanges
()
方法
获取表集合的
GetTable
()
方法
获取以修改对象的
GetChangeSet
方法,它有
3
个自读集合
Deletes
属性
:
已从
ChangeSet
中删除的实体
Inserts
属性
:
已插入到
ChangeSet
中的实体
Updates
属性
:
已在
ChangeSet
中更新的实体
4.处理Table<T>类型结果
4.1使用Table<T>能够方便的操作数据库中的数据
1)DeleteAllOnSubmit(TSubEntity)将集合中的所有实体置于Pending delete状态
2)DeleteOnSubmit()此表中的实体置于ending delete
3)InsertAllOnSubmit(TSubEntity)将集合中的所有处于Pending insert状态的实体添加到DataContext
4)InsertOnSubmit()将处于Pending insert状态的实体添加到Table<TEntity>
例: LinqDBDataContext DB = new LinqDBDataContext();
Role role = new Role() { RoleName = "水军" };
DB.Role.InsertOnSubmit(role);
DB.SubmitChanges();//只改变Table<T>中T的状态,并没有真正的将数据操作的结果写入到数据库中;提交到数据库必须调用相应数据库上下文的SubmitChanages()方法
Response.Write("添加后角色个数:" + DB.Role.Count());
5.处理EntitySet<T>类型结果
5.1EntitySet<T>用来描述实体类中包含的其他实体的集合
1)
Add()
方法能够将元素或实体添加到
EntitySet
<T>
集合末尾
2)
Remove()
方法能够从
EntitySet
<T>
中移除指定的元素或实体
3)
RemoveAt
()
方法能够从
EntitySet
<T>
中移除指定位置处的元素或实体
4)
Contains()
方法能够判断在
EntitySet
<T>
中是否包含指定的元素或实体
例: //创建linqDB上下事例
LinqDBDataContext DB = new LinqDBDataContext();
//获取用户名Product
EntitySet<Product> productInfo = DB.UserInfo.First().Product;
//显示当前数量
Response.Write("删除前的数量:" + productInfo.Count + "<br />");
//移除最后一
productInfo.RemoveAt(productInfo.Count - 1);
//映射到数据库中
DB.SubmitChanges();
//打印删除后的数量
Response.Write("删除后的数量:" + productInfo.Count + "<br />");
6.处理EntityRef 的结果
EntityRef<T>处理一对多关系中的数据
7.查询数据库中的数据
1)
from… in
子句:指定查询操作的数据源和范围变量
2)
select
子句:指定查询结果的类型和表现形式
3)
where
子句:筛选元素的逻辑条件,一般由逻辑运算符组成
4)
group… by
子句:对查询进行分组
5)
orderby
子句:对查询结果进行排序,可以为“升序”或“降序”
6)
join
子句:连接多个查询操作的数据源
7)
let
子句:引入用于存储查询表达式中的子表达式结果的范围变量
8)
into
子句:提供一个临时标示符,充当对
join
、
group
或
select
子句的结果
8.简单查询
简单查询、聚合查询、分组查询、复杂查询 //创建linqdb上下文事例
LinqDBDataContext DB = new LinqDBDataContext();
//创建linqdb上下文事例
var query = from user in DB.UserInfo
where user.ID < 5
select user;
//指定数据源
GridView1.DataSource = query;
//绑定数据源
GridView1.DataBind();
9.聚合查询
//创建linqdb上下文事例
LinqDBDataContext DB = new LinqDBDataContext();
var query = from product in DB.Product
where product.Price == DB.Product.Max(p => p.Price)
select product;
GridView1.DataSource = query;
GridView1.DataBind();
10.复杂查询
//创建linqdb上下文事例
LinqDBDataContext DB = new LinqDBDataContext();
//创建linqdb上下文事例
var query = from user in DB.UserInfo
join role in DB.UserRole on user.ID equals role.UserID
where user.ID < 5 && user.Username.Length >= 3
select new { ID = user.ID, Name = user.Username, Role = role.Role.RoleName };
//指定数据源
GridView1.DataSource = query;
//指定数据源
GridView1.DataBind();
11.分组查询
//创建linqdb上下文事例
LinqDBDataContext DB = new LinqDBDataContext();
//linq分组
var query = from res in
(from user in DB.UserInfo
join order in DB.Order on user.ID equals order.UserId
select new { ID = user.ID, Name = user.Username }
)
group res by res.ID;
foreach (var item in query)
{
//创建Gv
GridView gridView = new GridView();
gridView.DataSource = item;
gridView.DataBind();
//添加html元素
Page.Form.Controls.Add(gridView);
}
12.动态数据库支持
选用ASP.NEToynaic data linq to sql 网站
13.Lambda 表达式