標籤:des style blog http color os 使用 io ar
本文轉自:http://www.cnblogs.com/suizhikuo/p/3791799.html
我們繼續講解LINQ to SQL語句,這篇我們來討論Union All/Union/Intersect操作和Top/Bottom操作和Paging操作和SqlMethods操作 。Union All/Union/Intersect操作適用情境:對兩個集合的處理,例如追加、合并、取相同項、相交項等等。Concat(串連)說明:串連不同的集合,不會自動過濾相同項;延遲。1.簡單形式:var q = ( from c in db.Customers select c.Phone ).Concat( from c in db.Customers select c.Fax ).Concat( from e in db.Employees select e.HomePhone );語句描述:返回所有消費者和僱員的電話和傳真。2.複合形式:var q = ( from c in db.Customers select new { Name = c.CompanyName, c.Phone } ).Concat( from e in db.Employees select new { Name = e.FirstName + " " + e.LastName, Phone = e.HomePhone } );語句描述:返回所有消費者和僱員的姓名和電話。Union(合并)說明:串連不同的集合,自動過濾相同項;延遲。即是將兩個集合進行合併作業,過濾相同的項。var q = ( from c in db.Customers select c.Country ).Union( from e in db.Employees select e.Country );語句描述:查詢顧客和職員所在的國家。Intersect(相交)說明:取相交項;延遲。即是擷取不同集合的相同項(交集)。即先遍曆第一個集合,找出所有唯一的元素,然後遍曆第二個集合,並將每個元素與前面找出的元素作對比,返回所有在兩個集合內都出現的元素。var q = ( from c in db.Customers select c.Country ).Intersect( from e in db.Employees select e.Country );語句描述:查詢顧客和職員同在的國家。Except(與非)說明:排除相交項;延遲。即是從某集合中刪除與另一個集合中相同的項。先遍曆第一個集合,找出所有唯一的元素,然後再遍曆第二個集合,返回第二個集合中所有未出現在前面所得元素集合中的元素。var q = ( from c in db.Customers select c.Country ).Except( from e in db.Employees select e.Country );語句描述:查詢顧客和職員不同的國家。Top/Bottom操作適用情境:適量的取出自己想要的資料,不是全部取出,這樣效能有所加強。Take說明:擷取集合的前n個元素;延遲。即只返回限定數量的結果集。var q = ( from e in db.Employees orderby e.HireDate select e) .Take(5);語句描述:選擇所僱用的前5個僱員。Skip說明:跳過集合的前n個元素;延遲。即我們跳過給定的數目返回後面的結果集。var q = ( from p in db.Products orderby p.UnitPrice descending select p) .Skip(10);語句描述:選擇10種最貴產品之外的所有產品。TakeWhile說明:直到某一條件成立就停止擷取;延遲。即用其條件去依次判斷源序列中的元素,返回符合判斷條件的元素,該判斷操作將在返回false或源序列的末尾結束 。SkipWhile說明:直到某一條件成立就停止跳過;延遲。即用其條件去判斷源序列中的元素並且跳過第一個符合判斷條件的元素,一旦判斷返回false,接下來將不再進行判斷並返回剩下的所有元素。Paging(分頁)操作適用情境:結合Skip和Take就可實現對資料分頁操作。1.索引var q = ( from c in db.Customers orderby c.ContactName select c) .Skip(50) .Take(10);語句描述:使用Skip和Take運算子進行分頁,跳過前50條記錄,然後返回接下來10條記錄,因此提供顯示Products表第6頁的資料。2.按唯一鍵排序var q = ( from p in db.Products where p.ProductID > 50 orderby p.ProductID select p) .Take(10);語句描述:使用Where子句和Take運算子進行分頁,首先篩選得到僅50 (第5頁最後一個ProductID)以上的ProductID,然後按ProductID排序,最後取前10個結果,因此提供Products表第6頁的資料。請注意,此方法僅適用於按唯一鍵排序的情況。SqlMethods操作在LINQ to SQL語句中,為我們提供了SqlMethods操作,進一步為我們提供了方便,例如Like方法用於自訂通配運算式,Equals用於相比較是否相等。Like自訂的通配運算式。%表示零長度或任意長度的字串;_表示一個字元;[]表示在某範圍區間的一個字元;[^]表示不在某範圍區間的一個字元。比如查詢消費者ID以“C”開頭的消費者。 var q = from c in db.Customers where SqlMethods.Like(c.CustomerID, "C%") select c;比如查詢消費者ID沒有“AXOXT”形式的消費者:var q = from c in db.Customers where !SqlMethods.Like(c.CustomerID, "A_O_T") select c;DateDiffDay說明:在兩個變數之間比較。分別有:DateDiffDay、DateDiffHour、DateDiffMillisecond、DateDiffMinute、DateDiffMonth、DateDiffSecond、DateDiffYear var q = from o in db.Orders where SqlMethods .DateDiffDay(o.OrderDate, o.ShippedDate) < 10 select o;語句描述:查詢在建立訂單後的 10 天內已發貨的所有訂單。已編譯查詢操作(Compiled Query)說明:在之前我們沒有好的方法對寫出的SQL語句進行編輯重新查詢,現在我們可以這樣做,看下面一個例子://1.建立compiled query NorthwindDataContext db = new NorthwindDataContext(); var fn = CompiledQuery.Compile( (NorthwindDataContext db2, string city) => from c in db2.Customers where c.City == city select c); //2.查詢城市為London的消費者,用LonCusts集合表示,這時可以用資料控制項綁定 var LonCusts = fn(db, "London"); //3.查詢城市為Seattle的消費者 var SeaCusts = fn(db, "Seattle");語句描述:這個例子建立一個已編譯查詢,然後使用它檢索輸入城市的客戶。 原文地址:http://blog.csdn.net/aladdinty/article/details/3599878
[轉]C#Linq中的Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods,skip,take,takewhile,skipwhile,編譯查詢等