LINQ to SQL 是將對象關系映射到.NET框架中的一種實現。它可以將關系數據庫映射為.NET Framework中的一些類。 然后,開發人員就可以通過使用 LINQ to SQL對數據庫中的數據進行查詢、修改、插入、刪除等操作。
LINQ to SQL類映射到SQL Server數據庫中的表,這些類被稱做“實體類”,實體類中的屬性或字段映射到SQL server 數據庫中表的列,實體類之間的關聯映射到 SQL Server數據庫中的外鍵關系,LINQ to SQL類中的方法映射為SQL 數據庫中 的存儲過程或函數。下表為LINQ to SQL對象模型和 SQL Server數據庫中的對象的映射關系。
先添加LINQ to SQL類 xxxxDB.dbml 記住你的名稱 在App_Code中打開xxxxDB.dbml 把需要操作的表拖進去即可
創建DBML文件,其中包含了*.dbml.layout文件和 *.designer.cs文件。 其中*.dbml.layout保存了 Dbml文件的布局。 *designer.cs文件是Visual Studio 2008集成開發環境調用代碼生成工具SqlMetail創 建的dbml文件的代碼。
DataContext稱為數據上下文,它為LINQ to SQL 提供操作數據庫的入口,如果使用LINQ to SQL 操作數據庫,則首先需要為數據庫創建一個繼承於DataContext類的自定義的數據上下文類,並在該類中定義表,以及操作數據的方法等。
DataContext類充當SQL Server數據庫與映射到該數據庫的LINQ to SQL實體類之間的管道,它包含用於連接數據庫以及操作數據庫數據的連接字符串信息和方法。DataContext類能夠通過數據庫連接或連接字符串來映射數據庫中的所有實體的源,並跟蹤和標識用戶對數據庫的更改。用戶可以調用其SubmitChanges()方法將所有更改提交到數據庫。
簡單查詢
NorthwindDBDataContext dc = new NorthwindDBDataContext(); //添加LINQ to SQL類時起的名字是什么這就是什么 var result = from a in dc.Products where a.UnitPrice.GetValueOrDefault()<10 select a; //LINQ查詢語句 找到價格小於10的數據 GridView1.DataSource = result; GridView1.DataBind();
當只要Where條件查詢的時候 簡寫
dc.Products.where(x=>x.ID==1); 查詢產品編號等於1的產品
聯合查詢
LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString); var result = from user in db.UserInfo join ur in db.UserRole on user.ID equals ur.UserID join role in db.Role on ur.RoleID equals role.ID where user.ID < 200 select new { ID = user.ID, //顯示ID,用戶名,電子郵箱和角色 UserName = user.Username, Email = user.Email, RoleName = role.RoleName }; dl_List.DataSource = result; dl_List.DataBind();
**分組查詢和聚合查詢
from p in dc.Products
group p(分組對象) by p.CategoryID(分組依據) into g //g里面就是p的集合 g.key=p.CategoryID
select new{ } //顯示什么這里就寫什么
NorthwindDBDataContext dc = new NorthwindDBDataContext(); //根據產品ID來得到最貴的產品價格和最低的產品價格 var result = from p in dc.Products group p by p.CategoryID into g select new //映射到新的匿名對象 需要顯示什么里面就去生成什么 { CateID=g.Key, //by和面接什么 g.key就是什么 Max=g.Max((x)=>x.UnitPrice), //聚合函數 最大值 Min=g.Min((x)=>x.UnitPrice) //聚合函數 最小值 }; //獲取每個分類中產品的總個數,並顯示分類名,總數,總價 var result1 = from p in dc.Products join c in dc.Categories on p.CategoryID equals c.CategoryID group new { p = p, c = c } by c.CategoryName into g //new { p = p, c = c } 把需要的對象都添加到匿名對象中 select new { CateName=g.Key, Count=g.Count(), //總數 Sum=g.Sum((x)=>x.p.UnitPrice) //求總價 }; //獲取每個分類中最貴的產品價格和產品名稱 var result2 = from p in dc.Products join c in dc.Categories on p.CategoryID equals c.CategoryID group new { p = p, c = c } by c.CategoryName into g select new { Max=g.Max((x)=>x.p.UnitPrice), CateName=g.Key, ProductName=(from u in dc.Products where u.UnitPrice==g.Max((x)=>x.p.UnitPrice) //條件用來過濾產品名,只需要最貴那個 select u.ProductName //投影一個產品名 根據需要來映射 這里需要產品名稱就只映射產品名稱 ).First() //返回序列中的第一個元素 }; GridView1.DataSource = result2; GridView1.DataBind();