All articles(网络文学目录) All Pictures(图片目录) All Softwares(软件目录)

 
LINQ体验(8)——LINQ,to,SQL语句之Union,All,、Union、,Intersect

Writer: 归海一刀 Article type: Programming skills(编程技巧) Time: 2014/1/30 1:03:25 Browse times: 340 Comment times: 0

LINQ体验(8)——LINQ,to,SQL语句之Union,All,、Union、,Intersect


Head photo

Go homepage
Upload pictures
Write articles

LINQ体验(8)——LINQ to SQL语句之Union All/Union/Intersect_[Asp.Net教程]

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

我们继续讲解LINQ语句,这篇我们来讨论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就可实现对数据分页操作。

var q = (    from c in db.Customers    orderby c.ContactName    select c)    .Skip(50)    .Take(10);

语句描述:跳过前50条记录,取出接下来的10条记录,形成乘积表在第6页显示。

var q = (    from p in db.Products    where p.ProductID > 50    orderby p.ProductID    select p)    .Take(10);

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




There are 0 records,
Comment:
Must be registered users to comment(必须是注册用户才能发表评论)

Disclaimer Privacy Policy About us Site Map
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.