標籤:
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();
聯集查詢
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();
LinQ to SQL 查詢