LINQ to SQL語句(9)之Top/Bottom和Paging和SqlMethods

適用場景:適量的取出本身想要的數據,不是所有取出,這樣性能有所增強。性能

Take

說明:獲取集合的前n個元素;延遲。即只返回限定數量的結果集。spa

var q = (
    from e in db.Employees
    orderby e.HireDate
    select e)
    .Take(5);

語句描述:選擇所僱用的前5個僱員。code

Skip

說明:跳過集合的前n個元素;延遲。即咱們跳過給定的數目返回後面的結果集。blog

var q = (
    from p in db.Products
    orderby p.UnitPrice descending
    select p)
    .Skip(10);

語句描述:選擇10種最貴產品以外的全部產品。排序

TakeWhile

說明:直到某一條件成立就中止獲取;延遲。即用其條件去依次判斷源序列中的元素,返回符合判斷條件的元素,該判斷操做將在返回false或源序列的末尾結束 。索引

SkipWhile

說明:直到某一條件成立就中止跳過;延遲。即用其條件去判斷源序列中的元素而且跳過第一個符合判斷條件的元素,一旦判斷返回false,接下來將再也不進行判斷並返回剩下的全部元素。ip

Paging(分頁)操做

適用場景:結合Skip和Take就可實現對數據分頁操做。ci

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頁的數據。請注意,此方法僅適用於按惟一鍵排序的狀況。  string

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");

語句描述:這個例子建立一個已編譯查詢,而後使用它檢索輸入城市的客戶。

相關文章
相關標籤/搜索