我们继续解说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体验(8)——LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods的更多相关文章

  1. 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体验(9)——LINQ to SQL语句之Insert/Update/Delete操作

    我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作.这个在我们的程序中最为常用了.我们直接看例子. Insert/Update/Delete操作 插入( ...

  6. LINQ体验(11)——LINQ to SQL语句之Null语义和String/DateTime方法

    在本系列中.主要介绍LINQ to SQL基础的东西,由于LINQ太强大了,它对我们寻常使用不同的数据源有着不同的内容,其包含对于SQL Server 数据库的LINQ to SQL:对于XML 文档 ...

  7. LINQ体验(13)——LINQ to SQL语句之运算符转换和ADO.NET与LINQ to SQL

    运算符转换 1.AsEnumerable:将类型转换为泛型 IEnumerable 使用 AsEnumerable<TSource> 可返回类型化为泛型 IEnumerable 的參数.在 ...

  8. LINQ体验(18)——LINQ to SQL语句之视图和继承支持

    视图 我们使用视图和使用数据表类似,仅仅需将视图从"server资源管理器/数据库资源管理器"拖动到O/R 设计器上,自己主动能够创建基于这些视图的实体类.我们能够同操作数据表一样 ...

  9. LINQ体验(7)——LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains

    我们继续讲解LINQ to SQL语句,这篇我们来讨论Group By/Having操作符和Exists/In/Any/All/Contains操作符. Group By/Having操作符 适用场景 ...

随机推荐

  1. python对XML 操作

    一.XML的读取. 在 NewEdit 中有代码片段的功能,代码片段分为片段的分类和片段的内容.在缺省情况下都是用XML格式保存的.下面我讲述一下,如何使用minidom来读取和保存XML文件. 下面 ...

  2. 10.3.3 WebView的几个常见功能

    (1)背景设置,例如下面的代码. webView.setBackgroundColor(0);//先设置背景色为transparent webView.setBackgroundResource(R. ...

  3. centos vi和vim用法

    所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正 ...

  4. Linux学习笔记--文件夹结构

    暂时先上一张图学习吧,先大致了解好,再进行深入的学习.

  5. Asp.net MVC4 Step By Step(4)-使用Ajax

    Ajax技术就是利用Javascript和XML技术实现这样的效果, 可以向Web服务器发送异步请求, 返回更新部分页面的数据, 而不需要全部更新整个页面. Ajax请求两种类型的内容, 一种是服务端 ...

  6. Linux通信之poll机制分析

    poll机制分析 韦东山 2009.12.10 所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数.比如系统调用open.read.write.poll,与之对应的 ...

  7. 【SQL】含有NULL值的排序

    查询结果中有NULL值,当进行升序排序时,NULL值默认为“最大值”,排在最后面.要想改变NULL值的显示顺序,只需要在SQL语句后面加上NULLS FIRST(排在前面),NULLS LAST(排在 ...

  8. SQL语言入门

    内容来源:唐成. PostgreSQL修炼之道[M]. 机械工业出版社, 2015. 此书购买链接:京东 亚马逊 SQL(Structured Query Language) 结构化查询语言 1. 语 ...

  9. 在 ef 中执行 DbContext.Table.AddRange(Enitites).ToList() 会发生什么

    在 ef 中执行 DbContext.Table.AddRange(Enitites).ToList() 会发生什么 昨天和朋友摸鱼,无意之间聊到了执行 DbContext.Table.AddRang ...

  10. iOS安全策略之HTTPS

    1.HTTPS传输流程 2.常用加密算法 3.AFN证书校验策略及核心方法 4.SSL Pinning 5.CA证书申请流程 HTTPS经由超文本传输协议进行通信,但利用SSL/TLS来对数据包进行加 ...