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

语句描述:这个例子建立一个已编译查询,而后使用它检索输入城市的客户。