LINQ统一了查询语法,可以把任何数据源作为查询对象。
LINQ查询必须包括***获取数据源,创建查询,执行查询***3部分内容。
例1 把数组作为数据源
protected void Page_Load(object sender,EventArgs e)
{
string[] User_name = {"王一","李二","赵三","陈四","王五"};
var v_namae = from p in User_name
where P.Indexof("王") == 0
select p;
foreach(var v in v_namae)//将LINQ查询结果输出页面
{
Response.Write(v.ToString() + "<br/>");
}
}
LINQ to SQL 就是将LINQ查询翻译成SQL语句
LINQ to SQL 对象模型 | 关系数据模型 |
---|---|
实体类 | 表 |
类成员 | 列 |
关联 | 外键关系 |
方法 | 存储过程或函数 |
例2
1.服务器资源管理器中:添加数据库连接
2.添加LINQ to SQL 类。创建类过程中,会自动创建一个数据上下文。
3.将数据表拖动到数据区中,以创建LINQ to SQL 实体类’customers’。实体类customers映射数据表“customers”.
记住在LINQ to SQL 类中创建,修改后要先保存,不然程序没法确认该LINQ to SQL 类的变更结果。
4.打开Default.aspx.cs
protected void Page_Load(object sender,EventArgs e)
{
//获取数据源
Customers_ClassDataContext My_Customer = new Customers_ClassDataContext();//定义LINQ to SQL实体的一个实例
//创建查询
var this_Customer = from V_Customer in My_Customer.Customers
where V_Customer.ContactTitle.Indexof("Sales") >= 0
order by V_Customer.ContactName
select V_Customer.ContactName;
//执行查询
foreach (Var c_name in this_Customer)//输出页面显示
{
Response.Write(c_name + "<br/>");
}
}
DataContext与实体类
DataContext又称为数据上下文。是一个LINQ to SQL 类。该类充当SQL server数据库与LINQ to SQL 实体类之间的管道。
例子
搭建开发环境
1.将数据库复制到站点的“App_Data”目录下
2.单击“添加引用” 选择“system.Data.Linq”程序集。添加程序集引用是为了在LINQ to SQL 开发中,可以直接使用DataContext类和Table类。
定义实体类
1.添加一个类:Customers.
添加System.Data.Linq 和System.Data.Linq.Mapping两个命名空间
2.根据要映射数据表各字段及数据类型,设置类的属性。
[Table(Name = "Customers")]//定义映射数据表名
public class Cusotmers
{
[Column(Name = "CusotomerID,IsPrimaryKey = true")]//定义映射字段
public string CusotmerID//对应字段
{ get; set; }
...
[Column(Name = "Fax")]
public string Fax
{ get; set;}
}
类似定义
https://docs.microsoft.com/zh-cn/aspnet/web-forms/overview/getting-started/getting-started-with-aspnet-45-web-forms/shopping-cart
创建DataContext连接数据库
就是为了连接数据库,将LINQ to SQL 对象模型映射到相应的数据库。只有创建一个DataContext,并通过该类下的GetTable方法将数据表映射连接到实体类,才可以实现查询操作数据库的目的。
1.添加GridView控件
2.Page_Load事件中添加代码
DataContext db = new DataContext(Server.MapPath("App_Data\\northwnd.mdf"));//此处参数String 是数据文件的绝对路径,当然也可以数据库连接字符串
Table<Cusomers> Customers = db.GetTable<Customers>();//定义LINQ to SQL 实体的一个实例
//此刻可添加日志方便LINQ调试
//StreamWriter Log_txt = new StreamWriter(Server.MapPath("log.txt"),true);
//db.Log = Log_txt;
var this_Customers = from V_Customer in Customers
where V_Customer.ContactTitle.IndexOf("Sales") >= 0
order by V_Customer.ContactName
select new {用户编号 = V_Customer.CustomerID,
用户名 = V_Customer.ContactName,};
GridView1.DataSource = this_Customers;
GridView1.DataBind();
//Log_txt.Close();//关闭文件流
由于LINQ to SQL 要转换为SQL查询,才可以查询操作关系数据库。
DataContext类型也提供了执行SQL语句的功能。
例子
1.在以上的例子上 添加新页面,为页面添加GridView控件。设置其AutoGenerateColumns属性为false
2.为GridView添加2列,类型为数据绑定(BoundField)。
一列字段名为CustomersID,表头为用户编号。
另一列字段为ContactName,表头为用户名。3
3.Page_Load
DataContext db = new DataContext(Server.MapPath("App_Data\\northwnd.mdf"));
db.CommandTimeout = 360;
string newcity = "销售管理员";
string com_txt;
com_txt = "update Customer set ContactName = ContactName + {0}"+
"where ContactTitle like '%Sales%'";
db.ExecuteCommand(com_txt,newcity);//执行修改变更查询
com_txt = "select Top 6 Customers where ContactTitle like '%Sales%'";
GridView1.Datasource = db.ExecuteQuery<Customers>(com_txt);
GridView1.DataBind();
db.Connection.Close();
ExecuteCommand(String,Object[])方法执行修改查询
ExecuteQuery方法查询数据,返回泛型数据表Customers,并绑到数据控件中。
创建强类型Datacontext
通过强类型DataContext还可以创建,删除数据库。
Customers_Datecontext db = new Customers_Datacontext(Server.MapPath("App_Data\\test.mdf"));//新增一个数据库文件text.mdf.根据Customers实体类创建数据库的
StreamWriter Log_txt = new StreamWriter(Server.MapPath("log.txt"),true);
db.Log = Log_txt;
db.CreateDatabase();//创建数据库
//db.DeleteDatabase();删除数据库
db.Connection.Close();
LINQ to SQL 查询语法(略)
查询操作语句
主要是指数据的插入,更新,删除等语句。
LINQ查询操作语句主要表现为InsertOnSubmit(Tentity),DeleteOnSubmit(Tentity).
其中参数Tentity为要插入,更新,删除的实体。
最后还要通过数据上下文的SubmitChanges方法,才可以把结果更新到数据库中。
例子
创建LINQ to SQL 类为Data,并把数据表拖到数据区中,以创建4个实体类。
1.LINQ 插入操作
DataDataContext db = new DataDataContext();//创建强类型的一个实例
var cutw = new Customers
{
CustomerID = "001",
ContactName = "Wenlive",
Country = "China",
CompanyName = "jyworke"
};
db.Customers.InsertOnSubmint(cutw);
db.SubmitChanges();
LINQ更新操作
/创建强类型的一个实例
var Cust = db.Customers.where (p => p.ContactName == “Wenlive”);//查询用户
foreach(var p in Cust)
{
p.ContactTitle = “handlers”;//修改公司职位
p.Address = “There are good where”;//修改联系地址
}
db.SubmitChanges();
GridView1.DataSource = Cust;
GridView1.DataBind();
LINQ 删除操作
DataDataContext db = new DataDataContext();
var Del = db.Customers.First(p => p.CustomersID == "001");//查询用户
db.Customers.DeleteOnSubmit(Del);//删除该用户
var Del_t = db.GetChangeSet().Deletes;//获取执行删除操作的实体
GridView1.DataSource = De1_t
GridView.DataBind();
db.SubmitChanges();