我们继续讲解LINQ to SQL语句,这篇我们来讨论Union All/Union/Intersect操作和Top/Bottom操作和Paging操作和SqlMethods操作 。

Union All/Union/Intersect操作

适用场景:对两个集合的处理,例如追加、合并、取相同项、相交项等等。

Concat(连接)

说明:连接不同的集合,不会自动过滤相同项;延迟。

1.简单形式:

  1. var q = (
  2. from c in db.Customers
  3. select c.Phone
  4. ).Concat(
  5. from c in db.Customers
  6. select c.Fax
  7. ).Concat(
  8. from e in db.Employees
  9. select e.HomePhone
  10. );

语句描述:返回所有消费者和雇员的电话和传真。

2.复合形式:

  1. var q = (
  2. from c in db.Customers
  3. select new
  4. {
  5. Name = c.CompanyName,
  6. c.Phone
  7. }
  8. ).Concat(
  9. from e in db.Employees
  10. select new
  11. {
  12. Name = e.FirstName + " " + e.LastName,
  13. Phone = e.HomePhone
  14. }
  15. );

语句描述:返回所有消费者和雇员的姓名和电话。

Union(合并)

说明:连接不同的集合,自动过滤相同项;延迟。即是将两个集合进行合并操作,过滤相同的项。

  1. var q = (
  2. from c in db.Customers
  3. select c.Country
  4. ).Union(
  5. from e in db.Employees
  6. select e.Country
  7. );

语句描述:查询顾客和职员所在的国家。

Intersect(相交)

说明:取相交项;延迟。即是获取不同集合的相同项(交集)。即先遍历第一个集合,找出所有唯一的元素,然后遍历第二个集合,并将每个元素与前面找出的元素作对比,返回所有在两个集合内都出现的元素。

  1. var q = (
  2. from c in db.Customers
  3. select c.Country
  4. ).Intersect(
  5. from e in db.Employees
  6. select e.Country
  7. );

语句描述:查询顾客和职员同在的国家。

Except(与非)

说明:排除相交项;延迟。即是从某集合中删除与另一个集合中相同的项。先遍历第一个集合,找出所有唯一的元素,然后再遍历第二个集合,返回第二个集合中所有未出现在前面所得元素集合中的元素。

  1. var q = (
  2. from c in db.Customers
  3. select c.Country
  4. ).Except(
  5. from e in db.Employees
  6. select e.Country
  7. );

语句描述:查询顾客和职员不同的国家。

Top/Bottom操作

适用场景:适量的取出自己想要的数据,不是全部取出,这样性能有所加强。

Take

说明:获取集合的前n个元素;延迟。即只返回限定数量的结果集。

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

语句描述:选择所雇用的前5个雇员。

Skip

说明:跳过集合的前n个元素;延迟。即我们跳过给定的数目返回后面的结果集。

  1. var q = (
  2. from p in db.Products
  3. orderby p.UnitPrice descending
  4. select p)
  5. .Skip(10);

语句描述:选择10种最贵产品之外的所有产品。

TakeWhile

说明:直到某一条件成立就停止获取;延迟。即用其条件去依次判断源序列中的元素,返回符合判断条件的元素,该判断操作将在返回false或源序列的末尾结束 。

SkipWhile

说明:直到某一条件成立就停止跳过;延迟。即用其条件去判断源序列中的元素并且跳过第一个符合判断条件的元素,一旦判断返回false,接下来将不再进行判断并返回剩下的所有元素。

Paging(分页)操作

适用场景:结合Skip和Take就可实现对数据分页操作。

1.索引

  1. var q = (
  2. from c in db.Customers
  3. orderby c.ContactName
  4. select c)
  5. .Skip(50)
  6. .Take(10);

语句描述:使用Skip和Take运算符进行分页,跳过前50条记录,然后返回接下来10条记录,因此提供显示Products表第6页的数据。

2.按唯一键排序

  1. var q = (
  2. from p in db.Products
  3. where p.ProductID > 50
  4. orderby p.ProductID
  5. select p)
  6. .Take(10);

语句描述:使用Where子句和Take运算符进行分页,首先筛选得到仅50 (第5页最后一个ProductID)以上的ProductID,然后按ProductID排序,最后取前10个结果,因此提供Products表第6页的数据。请注意,此方法仅适用于按唯一键排序的情况。

SqlMethods操作

在LINQ to SQL语句中,为我们提供了SqlMethods操作,进一步为我们提供了方便,例如Like方法用于自定义通配表达式,Equals用于相比较是否相等。

Like

自定义的通配表达式。%表示零长度或任意长度的字符串;_表示一个字符;[]表示在某范围区间的一个字符;[^]表示不在某范围区间的一个字符。比如查询消费者ID以“C”开头的消费者。

  1. var q = from c in db.Customers
  2. where SqlMethods.Like(c.CustomerID, "C%")
  3. select c;

比如查询消费者ID没有“AXOXT”形式的消费者:

  1. var q = from c in db.Customers
  2. where !SqlMethods.Like(c.CustomerID, "A_O_T")
  3. select c;

DateDiffDay

说明:在两个变量之间比较。分别有:DateDiffDay、DateDiffHour、DateDiffMillisecond、DateDiffMinute、DateDiffMonth、DateDiffSecond、DateDiffYear

  1. var q = from o in db.Orders
  2. where SqlMethods
  3. .DateDiffDay(o.OrderDate, o.ShippedDate) < 10
  4. select o;

语句描述:查询在创建订单后的 10 天内已发货的所有订单。

已编译查询操作(Compiled Query)

说明:在之前我们没有好的方法对写出的SQL语句进行编辑重新查询,现在我们可以这样做,看下面一个例子:

  1. //1.创建compiled query
  2. NorthwindDataContext db = new NorthwindDataContext();
  3. var fn = CompiledQuery.Compile(
  4. (NorthwindDataContext db2, string city) =>
  5. from c in db2.Customers
  6. where c.City == city
  7. select c);
  8. //2.查询城市为London的消费者,用LonCusts集合表示,这时可以用数据控件绑定
  9. var LonCusts = fn(db, "London");
  10. //3.查询城市为Seattle的消费者
  11. var SeaCusts = fn(db, "Seattle");

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

本系列链接:LINQ体验系列文章导航

LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods的更多相关文章

  1. LINQ体验(8)——LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods

    我们继续解说LINQ to SQL语句,这篇我们来讨论Union All/Union/Intersect操作和Top/Bottom操作和Paging操作和SqlMethods操作 . Union Al ...

  2. C#Linq中的Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods,skip,take,takewhile,skipwhile,编译查询等

    我们继续讲解LINQ to SQL语句,这篇我们来讨论Union All/Union/Intersect操作和Top/Bottom操作和Paging操作和SqlMethods操作 . Union Al ...

  3. [转]C#Linq中的Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods,skip,take,takewhile,skipwhile,编译查询等

    本文转自:http://www.cnblogs.com/suizhikuo/p/3791799.html 我们继续讲解LINQ to SQL语句,这篇我们来讨论Union All/Union/Inte ...

  4. LINQ to SQL语句(9)之Top/Bottom和Paging和SqlMethods

    适用场景:适量的取出自己想要的数据,不是全部取出,这样性能有所加强. Take 说明:获取集合的前n个元素:延迟.即只返回限定数量的结果集. var q = ( from e in db.Employ ...

  5. LINQ to SQL语句(8)之Concat/Union/Intersect/Except

    适用场景:对两个集合的处理,例如追加.合并.取相同项.相交项等等. Concat(连接) 说明:连接不同的集合,不会自动过滤相同项:延迟. 1.简单形式: var q = ( from c in db ...

  6. 年终巨献 史上最全 ——LINQ to SQL语句

    LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...

  7. LINQ to SQL语句非常详细(原文来自于网络)

    LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子 ...

  8. LINQ to SQL语句

    http://kb.cnblogs.com/page/42477/2/ 本系列文章导航 LINQ to SQL语句(1)之Where LINQ to SQL语句(2)之Select/Distinct ...

  9. LINQ to SQL语句对应SQL的实现

    LINQ to SQL语句(1)之Where LINQ to SQL语句(2)之Select/Distinct LINQ to SQL语句(3)之Count/Sum/Min/Max/Avg LINQ ...

随机推荐

  1. requirejs 一个拆分js项目的类库

    http://www.requirejs.cn/ http://requirejs.org/docs/start.html

  2. 解决win7和ubuntu双系统ubuntu不能上网的问题

    1.电脑基本配置如下. 我的电脑 戴尔 OptiPlex 9020 Mini Tower操作系统 Windows 7 专业版 64位 SP1 Ubuntu 14.04 2.装系统的过程不再赘述. 可以 ...

  3. jni开发中的常见错误

    * java.lang.UnsatisfiedLinkError: Native method not found: 本地方法没有找到 * 本地函数名写错 * 忘记加载.so文件 没有调用System ...

  4. Ubuntu上安装mono

    How do I use badgerports? badgerports is an Ubuntu repository. In order to use it, you must add it t ...

  5. PreferenceActivity详解

    为了引入这个概率 首先从需求说起 即:现有某Activity专门用于手机属性设置 那么应该如何做呢? 根据已学知识 很快一个念头闪过 即:Activity + Preference 组合 前者用于界面 ...

  6. MySQL的数据类型【总结】

    1.时间类型 MySQL的DateTime,TimeStamp,Date和Time数据类型. DATETIME类型用在你需要同时包含日期和时间信息的值时.MySQL检索并且以'YYYY-MM-DD H ...

  7. Encoding filter 编码过滤器

    1.首先编写过滤器,实际上就是继承了filter接口的一个类,实现其中的init  doChain  和destroy方法 package com.util; import java.io.IOExc ...

  8. Server的Transfer和Response的Redirect

    在实现页面跳转的时候,有些人喜欢用Response.Redirect,而有些人则喜欢用Server.Transfer.大部分时间似乎这两种方法都可以实现相同的功能,那究竟有区别吗? 查了些文档,发现两 ...

  9. Response.Flush()

    Response.Buffer=True就是在缓存网页 访问网站一般是程序直接输出网页结果,或从缓存中读取网页结果2种方式.两种方式在速度上是有差异的 设置 Response.Buffer = Tru ...

  10. css 重新学习系列(1)

    来源: http://www.cnblogs.com/Zigzag/archive/2009/04/16/1394356.html CSS之Position详解(1) CSS的很多其他属性大多容易理解 ...