博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LINQ体验(8)——LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods
阅读量:7009 次
发布时间:2019-06-28

本文共 3745 字,大约阅读时间需要 12 分钟。

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

Union All/Union/Intersect操作

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

Concat(连接)

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

1.简单形式:

var q = (         from c in db.Customers         select c.Phone        ).Concat(         from c in db.Customers         select c.Fax        ).Concat(         from e in db.Employees         select e.HomePhone        );

语句描写叙述:返回全部消费者和雇员的电话和传真。

2.复合形式:

var q = (         from c in db.Customers         select new         {             Name = c.CompanyName,             c.Phone         }        ).Concat(         from e in db.Employees         select new         {             Name = e.FirstName + " " + e.LastName,             Phone = e.HomePhone         }        );

语句描写叙述:返回全部消费者和雇员的姓名和电话。

Union(合并)

说明:连接不同的集合。自己主动过滤同样项。延迟。

即是将两个集合进行合并操作,过滤同样的项。

var q = (         from c in db.Customers         select c.Country        ).Union(         from e in db.Employees         select e.Country        );

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

Intersect(相交)

说明:取相交项;延迟。

即是获取不同集合的同样项(交集)。即先遍历第一个集合,找出全部唯一的元素,然后遍历第二个集合。并将每一个元素与前面找出的元素作对照。返回全部在两个集合内都出现的元素。

var q = (         from c in db.Customers         select c.Country        ).Intersect(         from e in db.Employees         select e.Country        );

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

Except(与非)

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

var q = (         from c in db.Customers         select c.Country        ).Except(         from e in db.Employees         select e.Country        );

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

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

语句描写叙述:使用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页的数据。

请注意,此方法仅适用于按唯一键排序的情况。

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

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

转载地址:http://qcttl.baihongyu.com/

你可能感兴趣的文章
大数据分析思路的4点心得
查看>>
小程故事多 | 看来微服务就是一把双刃剑
查看>>
互联网变革的十字路口 数据中心面临混合云转型
查看>>
IBM公司推出旨在促进混合云的云管理工具
查看>>
伪共享和缓存行
查看>>
微软将在新版Edge浏览器中支持广告拦截器
查看>>
意大利电信开始在米兰部署1Gbps宽带
查看>>
网络钓鱼防不胜防:大型科技公司竟被骗逾1亿美元
查看>>
联合光伏拟撤诉 *ST海润将免交2亿港元违约金
查看>>
网络间谍活动月光迷宫已演变成Turla
查看>>
欧洲运营商展开5GTango项目 应对特定行业市场
查看>>
Windows 10创作者更新将改进蓝牙功能
查看>>
睿联嘉业边缘融合大屏幕多媒体会议系统方案
查看>>
凯立德货车专用导航 应“运”而生
查看>>
光伏组件市场价格战下谁获益?
查看>>
价格血拼战频频上演 光伏业陷入集体焦虑
查看>>
聊天机器人真正的潜力,潜藏在个人金融领域
查看>>
英特尔或推可超频Kaby Lake酷睿i3处理器: 重拾赛扬300A荣光?
查看>>
要想在未来立足 微软等软件公司就必须折本研发硬件
查看>>
个人常用网址集合
查看>>