Linq join right join left join
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Reflection; namespace TestConsole
{
public class Program
{
public static void Main(string[] args)
{
var classify_list = new List<Alliance_FAQ_Classify>
{
new Alliance_FAQ_Classify{ClassifyID =,ClassifyName ="酒店"},
new Alliance_FAQ_Classify{ClassifyID =,ClassifyName ="机票"},
new Alliance_FAQ_Classify{ClassifyID =,ClassifyName ="团购"},
new Alliance_FAQ_Classify{ClassifyID =,ClassifyName ="旅游"},
new Alliance_FAQ_Classify{ClassifyID =,ClassifyName ="Other"}
}; var info_list = new List<Alliance_FAQ_Info>
{
new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =}, new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =}, new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =}, new Alliance_FAQ_Info{FAQID =,ClassifyID =},
new Alliance_FAQ_Info{FAQID =,ClassifyID =}
}; var info_group = from a in info_list
group a by a.ClassifyID into g
select new
{
ClassifyID=g.Key,
TotalCount=g.Count()
};
foreach (var g in info_group)
{
Console.WriteLine("ClassifyID:" + g.ClassifyID + " TotalCount:" + g.TotalCount);
}
Console.WriteLine("=================================================");
Console.WriteLine("Left Join:");
var left_list = from a in info_group
join b in classify_list
on a.ClassifyID equals b.ClassifyID into joinData
from c in joinData.DefaultIfEmpty()
select new
{
c.ClassifyID,
Count = a != null ? a.TotalCount : ,
c.ClassifyName
};
foreach (var l in left_list)
{
Console.WriteLine("ClassifyID:" + l.ClassifyID + " Count:" + l.Count + " ClassifyName:" + l.ClassifyName);
}
Console.WriteLine("=================================================");
Console.WriteLine("Right Join:");
var right_list = from a in classify_list
join b in info_group
on a.ClassifyID equals b.ClassifyID into joinData
from c in joinData.DefaultIfEmpty()
select new
{
a.ClassifyID,
Count = c != null ? c.TotalCount : ,
a.ClassifyName
};
foreach (var r in right_list)
{
Console.WriteLine("ClassifyID:" + r.ClassifyID + " Count:" + r.Count + " ClassifyName:" + r.ClassifyName);
}
Console.ReadLine();
}
} public class Alliance_FAQ_Info
{
public int FAQID { get; set; } public int ClassifyID { get; set; }
} public class Alliance_FAQ_Classify
{
public int ClassifyID { get; set; } public string ClassifyName { get; set; }
}
}

可以发现第一个就是满表
http://www.cnblogs.com/redmondfan/archive/2013/08/23/3276811.html
http://www.cnblogs.com/shenqiboy/p/3260105.html
DataTable dtA = new DataTable();
dtA.Columns.Add("id", typeof(int));
dtA.Columns.Add("price", typeof(string));
dtA.Rows.Add(, "");
dtA.Rows.Add(, ""); DataTable dtB = dtA.Clone();
dtB.Rows.Add(, "");
dtB.Rows.Add(, ""); DataTable dtC = dtA.Clone();
dtC.Columns.Add("price_excel"); var leftData = from a in dtA.AsEnumerable()
join b in dtB.AsEnumerable()
on a.Field<int>("id") equals b.Field<int>("id") into g
from b in g.DefaultIfEmpty()
select new
{
id = a.Field<int>("id"),
price = a.Field<string>("price"),
price_excel = b == null ? "Null" : b.Field<string>("price")
};
var rightData = from b in dtB.AsEnumerable()
where !dtA.AsEnumerable().Select(a => a.Field<int>("id")).Contains(b.Field<int>("id"))
select new
{
id = b.Field<int>("id"),
price = "Null",
price_excel = b.Field<string>("price")
}; var fullJoinData = leftData.Union(rightData);
fullJoinData.ToList().ForEach(q => dtC.Rows.Add(q.id, q.price, q.price_excel));
for(var i=;i<dtC.Rows.Count ;i++)
{
var r = dtC.Rows[i];
Console.WriteLine("id:" + r["id"] + " price:" + r["price"] + " price_excel:" + r["price_excel"]);
}

full join
http://blog.csdn.net/q107770540/article/details/7282005
Linq join right join left join的更多相关文章
- Linq表连接大全(INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、CROSS JOIN)
我们知道在SQL中一共有五种JOIN操作:INNER JOIN.LEFT OUTER JOIN.RIGHT OUTER JOIN.FULL OUTER JOIN.CROSS JOIN 1>先创建 ...
- Linq 多表连接查询join
在查询语言中,通常需要使用联接操作.在 LINQ 中,可以通过 join 子句实现联接操作.join 子句可以将来自不同源序列,并且在对象模型中没有直接关系(数据库表之间没有关系)的元素相关联,唯一的 ...
- LINQ TO SQL 中的join(转帖)
http://www.cnblogs.com/ASPNET2008/archive/2008/12/21/1358152.html join对于喜欢写SQL的朋友来说还是比较实用,也比较容易接受的东西 ...
- 1122MySQL性能优化之 Nested Loop Join和Block Nested-Loop Join(BNL)
转自http://blog.itpub.net/22664653/viewspace-1692317/ 一 介绍 相信许多开发/DBA在使用MySQL的过程中,对于MySQL处理多表关联的方式或者说 ...
- SQL JOIN\SQL INNER JOIN 关键字\SQL LEFT JOIN 关键字\SQL RIGHT JOIN 关键字\SQL FULL JOIN 关键字
SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表 ...
- hadoop 多表join:Map side join及Reduce side join范例
最近在准备抽取数据的工作.有一个id集合200多M,要从另一个500GB的数据集合中抽取出所有id集合中包含的数据集.id数据集合中每一个行就是一个id的字符串(Reduce side join要在每 ...
- SQL的inner join、left join、right join、full outer join、union、union all
主题: SQL的inner join.left join.right join.full outer join.union.union all的学习. Table A和Table B表如下所示: 表A ...
- 图解SQL的inner join(join)、left join、right join、full outer join、union、union all的区别
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...
- Oracle 表的连接方式(1)-----Nested loop join和 Sort merge join
关系数据库技术的精髓就是通过关系表进行规范化的数据存储,并通过各种表连接技术和各种类型的索引技术来进行信息的检索和处理. 表的三种关联方式: nested loop:从A表抽一条记录,遍历B表查找匹配 ...
- left join 和 left outer join 有什么区别?
left join 是left outer join的简写,left join默认是outer属性的.outer join则会返回每个满足第一个(顶端)输入与第二个(底端)输入的联接的行.它还返回任何 ...
随机推荐
- 站内SEO规范
一:文章的原创性 1.修改文章的标题,尽可能的选择新颖的,符合用户搜索习惯的标题. 2.修 改首段内容或自己动手来添加首段文字信息. 3.文章中图片ALT属性的修改和添加. 4.在不影响阅读的情况下, ...
- 2018/04/21 PHP 中的Session和Cookie知识总结
在之后的工作和学习中,更是发现了自己对于基础知识的不扎实,于是又返回头来学习,确实很多东西是之前没注意或是没掌握的. 着重讲一下这几个问题 -- 什么是 Cookie ? 简单来说: 因为 HTTP ...
- pyqt5核心-信号与槽(第二弹)
果: from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object): def setupUi(self, Form): Form.s ...
- 开机自启:bat实现一次性打开win7中的常用软件和文件夹
需求说明: 我们电脑(windows)办公,经常上班前一开机,就要手动打开很多文件夹和程序. 想节省时间,一键打开常用的文件夹和程序,研究了一下bat命令,于是mystart.bat产生了. myst ...
- Java多线程面试、笔试方向---后续补充
1.ThreadLocal类 线程级别的局部变量,为每个使用该变量的线程提供一个独立的变量副本,每个线程修改副本时不影响其他线程对象的副本. ThreadLocal实例通常作为静态私有字段出 ...
- DOM对象与Jquery对象转换
dom对象的样式是这么加的(js) .style.background = “red”; jquery对象样式是这么加的(jq) .css(“background”,”red”); <div i ...
- [py]GIL(全局解释器锁):多线程模式
在多线程 时同一时刻只允许一个线程来访问CPU,直到解释器遇到I/O操作或者操作次数达到一定数目时才会释放GIL 参考 Python虽然不能利用多线程实现多核任务,但可以通过多进程实现多核任务.多个P ...
- mysql 常用命令 常用SQL语句
维护命令 数据库 ##创建数据库 mysql> create database test; Query OK, 1 row affected ##删除数据库 mysql> drop dat ...
- python-字符串前面添加u,r,b的含义
u/U:表示unicode字符串 不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码. 一般英文字符在使用各种编码下, 基本都可以正常解析, 所以一般不带u:但是中文, ...
- 7.11 Models -- Customizing Adapters
一.概述 1. 在Ember Data中,和后台数据存储通信的逻辑存在于Adapter中.Ember Data的有一些内置的假设,一个 REST API 应该怎么看.如果你的后台约定和这些假设不同,E ...