专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » linq语句:LINQ体验(8)——LINQ to SQL语句的Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods »正文

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

来源: 发布时间:星期五, 2009年1月9日 浏览:18次 评论:0
  我们继续讲解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
     {
       Name = c.CompanyName,
       c.Phone
     }
    ).Concat(
     from e in db.Employees
     select
     {
       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(相交)  介绍说明:取相交项;延迟即是获取区别集合相同项(交集)即先遍历第个集合找出所有唯元素然后遍历第 2个集合并将每个元素和前面找出元素作对比返回所有在两个集合内都出现元素

var q = (
     from c in db.Customers
     select c.Country
    ).Intersect(
     from e in db.Employees
     select e.Country
    );
  语句描述:查询顾客和职员同在国家

  Except(和非)  介绍说明:排除相交项;延迟即是从某集合中删除和另个集合中相同先遍历第个集合找出所有唯元素然后再遍历第 2个集合返回第 2个集合中所有未出现在前面所得元素集合中元素

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;
DateDfDay  介绍说明:在两个变量的间比较分别有:DateDfDay、DateDfHour、DateDfMillisecond、DateDfMinute、DateDfMonth、DateDfSecond、DateDfYear 

var q = from o in db.Orders
    where SqlMethods
    .DateDfDay(o.OrderDate, o.ShippedDate) < 10
    select o;
  语句描述:查询在创建订单后 10 天内已发货所有订单

  已编译查询操作(Compiled Query)  介绍说明:在的前我们没有好思路方法对写出SQL语句进行编辑重新查询现在我们可以这样做看下面个例子:

//1.创建compiled query
NorthwindDataContext db = NorthwindDataContext;
var fn = CompiledQuery.Compile(
  (NorthwindDataContext db2, city) =>
  from c in db2.Customers
  where c.City city
  select c);
//2.查询城市为London消费者,用LonCusts集合表示这时可以用数据Control控件绑定
var LonCusts = fn(db, "London");
//3.查询城市为Seattle消费者
var SeaCusts = fn(db, "Seattle");
  语句描述:这个例子创建个已编译查询然后使用它检索输入城市客户

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: