適用場景:適量的取出自己想要的數據,不是全部取出,這樣性能有所加強。
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");
語句描述:這個例子創建一個已編譯查詢,然后使用它檢索輸入城市的客戶。
文章列表
留言列表
