LINQ 之Top/Bottom、Paging、SqlMethods

LINQ 2009-07-21 11:38:50 阅读397 评论0 字号:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值