C# LINQ入门(2)

 //Create DataTable
            DataTable dt = new DataTable();
            dt.Columns.Add("id");
            dt.Columns.Add("Name");
            dt.Columns.Add("city");
            dt.Rows.Add("1","李","北京");
            dt.Rows.Add("2", "李", "北京");
            dt.Rows.Add("3", "李", "北京");

            DataTable dt1 = new DataTable();
            dt1.Columns.Add("id");
            dt1.Columns.Add("Name");
            dt1.Columns.Add("city");
            dt1.Rows.Add("1", "张", "上海");
            dt1.Rows.Add("2", "张", "上海");
            dt1.Rows.Add("4", "张", "上海");

1. 内连接查询

 //内连接查询
            var result = from getdt in dt.AsEnumerable()
                         join getdt1 in dt1.AsEnumerable() on getdt.Field<string>("id") equals getdt1.Field<string>("id")
                         select new 
                         { id=getdt.Field<string>("id"),
                           name=getdt.Field<string>("name"),
                           city=getdt1.Field<string>("city")
                         };
            DataTable dc = dt.Clone();
            //将内连接查询的结果数据填充到dc表中
            result.ToList().ForEach(q=>dc.Rows.Add(q.id,q.name,q.city));

执行完上面的代码,表dc中的数据如下图:
在这里插入图片描述
和预想的结果相同。

2. 左连接查询

var resultleftjoin = from getdt in dt.AsEnumerable()
                          join getdt1 in dt1.AsEnumerable() on getdt.Field<string>("id") equals getdt1.Field<string>("id") into corr
                          from getdt2 in corr.DefaultIfEmpty()
                          select new
                          { id = getdt.Field<string>("id"),
                              name1 = getdt.Field<string>("name"),
                              name2 = getdt2==null? null : getdt2.Field<string>("name"),
                              city1 = getdt.Field<string>("city"),
                              city2 = getdt2 == null ? null : getdt2.Field<string>("city")
                          };
            DataTable leftTable = new DataTable();
            leftTable.TableName = "leftTable";
            leftTable.Columns.Add("id");
            leftTable.Columns.Add("name1");
            leftTable.Columns.Add("name2");
            leftTable.Columns.Add("city1");
            leftTable.Columns.Add("city2");
//将查询结果填充至DataTable中
            resultleftjoin.ToList().ForEach(q=> leftTable.Rows.Add(q.id,q.name1,q.name2,q.city1,q.city2));

结果如图:
在这里插入图片描述
结果和预想相同。

3. 右连接查询
右连接查询和左连接查询的逻辑是互通的。左连接查询是保留from的第一个表的所有数据,右连接查询是保留join后的第一个表的所有数据,当join后的第一个表和from后的第一个表互换,即将右连接查询转换为了左连接查询。
以‘2.右连接查询’中的数据为例:保留了Getdt(即dt表)中的所有数据,要想实现保留Getdt1(即dt2表)中所有的数据,即将dt和dt1调换位置即可。

var resultrightjoin = from getdt in dt1.AsEnumerable()
                                  join getdt1 in dt.AsEnumerable() on getdt.Field<string>("id") equals getdt1.Field<string>("id") into corr
                                  from getdt2 in corr.DefaultIfEmpty()
                                  select new
                                  {
                                     id = getdt.Field<string>("id"),
                                     name1 = getdt2 == null ? null : getdt2.Field<string>("name"),
                                     name2 = getdt.Field<string>("name"),
                                     city1 = getdt2 == null ? null : getdt2.Field<string>("city"),
                                     city2 =getdt.Field<string>("city")
                                 };
            DataTable rightTable = new DataTable();
            rightTable.TableName = "rightTable";
            rightTable.Columns.Add("id");
            rightTable.Columns.Add("name1");
            rightTable.Columns.Add("name2");
            rightTable.Columns.Add("city1");
            rightTable.Columns.Add("city2");

            resultrightjoin.ToList().ForEach(q => rightTable.Rows.Add(q.id, q.name1, q.name2, q.city1, q.city2));

结果如下:
在这里插入图片描述
结果和预想相同。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值