zoukankan      html  css  js  c++  java
  • [转]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/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 query 
    NorthwindDataContext 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://blog.csdn.net/aladdinty/article/details/3599878
  • 相关阅读:
    CSDN的验证码,真得很糟糕
    CSDN的验证码,为什么要这样呢
    <转>http协议 文件下载原理详解
    验证码,验证码,继续
    搞了一天,气死我了
    昨天下午三点,到晚上六点写的(干死单文档)
    一个早晨加,一个上午的结果
    Linux+QT4+我忙活半宿的结果
    Linux真好玩阿,不过我家电脑不行,运行不够流畅
    springboot之整合JPA
  • 原文地址:https://www.cnblogs.com/freeliver54/p/3936424.html
Copyright © 2011-2022 走看看