Linq 的基本操作 之Union All/Union/Intersect 操作_linq union all_fox123871的博客-程序员秘密

技术标签: C#  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Data.Linq.SqlClient;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        DataTable DataTable1 = new DataTable();
        DataRow row = DataTable1.NewRow();
        DataTable1.Columns.Add("编号");
        DataTable1.Columns.Add("姓名");

        row[0] = 1;
        row[1] = "靳志远";
  
        DataTable1.Rows.Add(row);

        DataTable DataTable2 = new DataTable();
        DataRow row2 = DataTable2.NewRow();
        DataTable2.Columns.Add("编号");
        DataTable2.Columns.Add("姓名");
        
        row2[0] = 1;
        row2[1] = "靳志远";
        DataTable2.Rows.Add(row2);
        DataTable newDataTable = DataTable1.Clone();
      //  Response.Write(newDataTable.Columns.Count.ToString());  //输出 2列;
        object[] obj = new object[newDataTable.Columns.Count];
        for (int i = 0; i < DataTable1.Rows.Count; i++)
        {
            DataTable1.Rows[i].ItemArray.CopyTo(obj, 0);
            //for (int j = 0; j < DataTable1.Rows[i].ItemArray.Length; j++)
            //{
            //    Response.Write(DataTable1.Rows[i][j].ToString());
            //}
            // Response.Write("获取DataTable1.Rows[i].ItemArray.Length.ToString():" + DataTable1.Rows[i].ItemArray.Length.ToString());
            newDataTable.Rows.Add(obj);
        }
        for (int i = 0; i < DataTable2.Rows.Count; i++)
        {
            DataTable2.Rows[i].ItemArray.CopyTo(obj, 0);
            newDataTable.Rows.Add(obj);
        }


        /*  简单形式:*/
        /*Conncat(连接)*/
        /* 说明:连接不同的集合,不会自动过滤相同项;延迟。*/
     
        var data2result = (from c in DataTable1.AsEnumerable()
                          select c).Concat(
                           from cc in DataTable2.AsEnumerable()
                           select cc
                          );

        //GridView1.DataSource = data2result.CopyToDataTable<DataRow>();
        //GridView1.DataBind();
        /*  合并:相当于sql 中UNION ALL*/
        /*连接不同的集合,自动过滤相同项;延迟。即是将两个集合进行合并操作,过滤相同的项*/
  
        var data3result = (from c in DataTable1.AsEnumerable()
                           select c).Union(
                             from cc in DataTable2.AsEnumerable()
                             select cc
                             );
        //GridView1.DataSource = data3result.CopyToDataTable<DataRow>();
        //GridView1.DataBind();

        /*Intersect 相交*/
        /*取相交项;延迟。即是获取不同集合的相同项(交集)。即先遍历第一个集合,找出所有唯一的元素,然后遍历第二个集合,
         并将每个元素与前面找出的元素作对比,返回所有在连个集合内都出现的元素。
         */
      
        var data4result = (from c in DataTable1.AsEnumerable()
                           select c).Intersect(
                               from cc in DataTable2.AsEnumerable()
                               select cc
                             );

        //GridView1.DataSource = data4result.CopyToDataTable<DataRow>();
        //GridView1.DataBind();

        /*Except(与非)*/
        /*说明:排除相交项;延迟。既是从某集合中删除与另一个集合中相同的项。先遍历第一个集合,找出所有唯一的元素,然后再遍历第二个集合,
         返回第二个集合中所有未出现在前面集合中的元素。*/
       
        var data5result = (from c in DataTable1.AsEnumerable()
                           select c).Except(
                       from cc in DataTable2.AsEnumerable()
                       select cc
                     );

        //GridView1.DataSource = data5result.CopyToDataTable<DataRow>();
        //GridView1.DataBind();

        /*Top/Botton操作*/
        /*适用场景:适量的取出自己想要的数据,不是全部取出,这样性能有所加强*/

        /*Take*/
        /*说明:获取集合的前n个元素;延迟。即只返回限定数量的结果集。*/
        /*ascending是升序(默认);descending是降序;*/
        DataClassesDataContext dcdc = new DataClassesDataContext();
        var data6result = (from c in dcdc.city orderby c.city_id ascending
                           select c ).Take(2);
        //GridView1.DataSource = data6result;
        //GridView1.DataBind();

        /*Skip*/
        /*说明:跳过集合的前n个元素;延迟。即我们跳过给定的数目返回后面的结果集。*/
        DataClassesDataContext dcdcskip = new DataClassesDataContext();
        var data7result = (from c in dcdc.city
                           orderby c.city_id ascending
                           select c).Skip(2);
        //GridView1.DataSource = data7result;
        //GridView1.DataBind();

        /*TakeWhile*/
        /*说明:直到某一条件成立就停止获取;延迟。即用其条件依次判断源序列中的 元素,
         返回符合判断条件的元素,该判断操作将在返回false或源序列的末尾结束。*/
 
        /*SkipWhile*/
        /*说明:直到某一条件成立就停止跳转;延迟。即用其条件去判断源序列中的元素并且跳过第一个符合判断条件
         的元素,一旦判断返回false,接下来将不再进行判断并返回剩下的所有元素。*/
        
        /*Paging(分页)操作*/
        /*适用场景:结合Skip和Take就可以实现对数据分页操作*/
        /*1.索引*/
        /*语句描述:使用Skip和Take运算符进行分页,跳过前3条记录,然后返回接下来的2条记录*/
        DataClassesDataContext dcdcpageing = new DataClassesDataContext();
        var data9result = (from c in dcdc.city
                           orderby c.city_id ascending
                           select c).Skip(3).Take(2);
        //GridView1.DataSource = data9result;
        //GridView1.DataBind();

        /*按唯一键排序*/
        /*语句描述:使用Where子句和Take运算符进行分页,首先筛选得到3以上的vcity_id,然后按ProductID排序,最后
         取前2条数据。*/
        DataClassesDataContext dcdcpageing1 = new DataClassesDataContext();
        var data9result1 = (from c in dcdc.city where c.city_id>3
                           orderby c.city_id ascending
                           select c).Take(2);
        //GridView1.DataSource = data9result1;
        //GridView1.DataBind();
        /*SqlMethods操作*/
        /*在LINQ to SQL语句中,为我们提供了SQLMETHODS操作,进一步为我们提供了方便,例如Like方法用于自定义通配*/
        /*Like*/
        /*自定义的通配表达式%表示零长度或任意长度的字符串;_表示一个字符;[]表示在某范围区间的一个字符;[^]表示不再某范围区间的一个字符。比如查询城市名city_name "南"开头的城市*/
        DataClassesDataContext dcdclike = new DataClassesDataContext();
        var data10result = from c in dcdclike.city
                           where SqlMethods.Like(c.city_name, "南%")
                           select c;
        GridView1.DataSource = data10result;
        GridView1.DataBind();


        /* 比如查询消费者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");
            语句描述:这个例子创建一个已编译查询,然后使用它检索输入城市的客户。

         */


    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fox123871/article/details/52073564

智能推荐

PHP Redis List [列表] 的使用_weixin_34238633的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

30余种加密编码类型的密文特征分析(建议收藏)_密文类型_admin-r꯭o꯭ot꯭的博客-程序员秘密

一、md5一般MD5值是32位由数字“0-9”和字母“a-f”所组成的字符串,如图。如果出现这个范围以外的字符说明这可能是个错误的md5值,就没必要再拿去解密了。16位值是取的是8~24位。md5的三个特征:确定性:一个原始数据的MD5值是唯一的,同一个原始数据不可能会计算出多个不同的MD5值。碰撞性:原始数据与其MD5值并不是一一对应的,有可能多个原始数据计算出来的MD5值是一样的,这就是碰撞。不可逆:也就是说如果告诉你一个MD5值,你是无法通过它还原出它的原始数据的,这不是你的技术不够牛,

Spring Security系列(21)- Oauth2资源服务器异常处理源码分析及自定义异常信息_remotetokenservices.loadauthentication_云烟成雨TD的博客-程序员秘密

资源服务器异常表现首先我们看下可能会发生的几个异常。未传认证消息头:传个错误令牌:源码分析接下传入一个错误Token分析下源码,康康这个异常是怎么处理的。在之前的文档中,我们分析过,资源服务器是由OAuth2AuthenticationProcessingFilter过滤器来完成的,如果发生OAuth2Exception 异常,也自行进行了处理。1. 抛出异常我们知道资源服务器,获取到Token以后,会去授权服务器校验令牌,获取信息。调用的是RemoteTokenServices的l

冰箱选得好,带娃没烦恼——高知宝妈冰箱选购经验分享_卡萨帝红外恒温实际用下来如何_野生电器工程师老宋的博客-程序员秘密

随着宝宝的到来,我们的两口之家俨然是个标准的亲子房:到处是宝宝的用品和玩具;客厅里不见了茶几,多出了围栏;床的四周增加了床围;厨房多了很多小家电,热奶器、消毒锅、辅食机等等,还有宝宝专用的锅碗刀具……终于,在宝宝开始添加辅食后,家里的小冰箱也要换掉了。家里这台冰箱是在租房时买的,新家乔迁时一并搬过来的。打开冰箱,冷藏区里堆满了一家人的食材,冷冻区里摆满了母乳。想到宝宝添加辅食后,肉类和蔬菜的种类样式都要增加,还要单独存放,和老公商量后便着手选购一台新冰箱。我们在万元预算的情况下货比三家,从容量和价格相近

JavaScript函数柯里化_猫老板的豆的博客-程序员秘密

函数柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。function sum(a,b,c) { return a+b+c;}console.log(sum(1,2,3)); // 6function sum(a) { return function(b) { retur...

Three.js Example 注解 —— canvas_geometry_panorama.html_panorama threejs_福州司马懿的博客-程序员秘密

本文搬自我的Github,https://github.com/555chy/three.js-example-comment,有兴趣的可以一起来完善,这个为Three.js的Example进行注解,方便初学者阅读three.js 官网 Example 地址:https://threejs.org/examples/&lt;!DOCTYPE html&gt;&lt;html lang="en...

随便推点

Windows下使用Composer安装yii2_weixin_33884611的博客-程序员秘密

本文为大家讲解的是如何在Windows使用Composer安装yii2的方法,感兴趣的同学参考下.YII简介Yii Framework是一个基于组件、用于开发大型 Web 应用的高性能 PHP 框架。Yii提供了今日Web 2.0应用开发所需要的几乎一切功能。Yii是最有效率的PHP框架之一。Yii是创始人薛强的心血结晶,于2008年1月1日开始开发。Composer简介Co...

4.4 卷积神经网络的重要应用_lizhaoxinLZX的博客-程序员秘密

吴恩达深度学习笔记——十二、第四课第四周:卷积神经网络的重要应用1 人脸识别1.1 人脸识别简介1.2 one-shot学习1.3 Siamese network1.4 Tirplet 损失函数1 人脸识别1.1 人脸识别简介人脸验证与人脸识别不同:同时人脸识别中一个很重要的方向就是检测是否是活的人脸,还是一张图片,这就需要我们训练神经网络时训练集带有这样的标签。1.2 one-shot学习人脸识别的一个难点就是我们的学习器需要仅仅通过一张该人物的图片学习到识别人脸,我们的解决办法是使用d函数

html显示用户ipv6地址,这三个获取IPv6地址的方法你了解多少?_雪中阳的博客-程序员秘密

IPv6是互联网工程任务组设计的用于替代IPv4的下一代IP协议。IPv6的使用,不仅能解决网络地址资源数量的问题,还促进了互联网技术的发展与应用。因此,很多国家均在积极的部署IPv6,而如今很多APP也已经支持IPv6。虽然IPv6已经逐渐普及,但相信很多人对获取IPv6地址的方法还不是很了解。方法一:用手机几乎所有的手机通过4G上网都能获取到IPv6+IPv4的地址。IPv4虽然是私网地址,无...

iOS 常用开源类库和下载地址_KingOfTheCoders的博客-程序员秘密

iOS开发者:开发几个常用的开源类库及下载地址: 1.json json编码解码2.GTMBase64 base64编码解码3.TouchXML xml解析4.SFHFKeychainUtils 安全保存用户密码到keychain中5.MBProgressHUD 很棒的一个加载等待特效框架6.ASIHTTPRequest http等相关协议封装7

深扒那些艺术的CSS_weixin_30399055的博客-程序员秘密

概览使用单个div做css绘图,会充分利用到:before、after伪元素使用border-radius、border来控制图形的形状。使用叠加的box-shadow来创建多个相同的形状(可以有不同的大小、位置、颜色、模糊)。在background-image、border-image属性上叠加使用渐变(线性、径向、圆锥、重复),叠加的渐变可以有不同的位置、大小颜色。这几个属性配...

吴恩达机器学习课后习题ex2(python实现)_flowerfu的博客-程序员秘密

机器学习课后习题ex2logistic回归二级目录logistic回归建立一个logistic回归模型来预测学生是否被大学录取。假设你是一所大学的系主任,你想根据每个申请者在两次考试中的成绩来决定他们的入学机会。建立一个分类模型来评估申请人根据这两次考试的分数,录取的可能性。二级目录...

推荐文章

热门文章

相关标签