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则会返回每个满足第一个(顶端)输入与第二个(底端)输入的联接的行.它还返回任何 ...
随机推荐
- lmathlib文件
lua的math库是通过lua扩展而来,主要对系统math库进行了一次封装,以供lua使用,一般可以从lmathlib文件开始阅读源码. //绝对值 static int math_abs (lua_ ...
- Python之Pandas使用教程(转)
https://blog.csdn.net/XiaoYi_Eric/article/details/79506660
- python 面向对象 issubclass
判断是否 他的父类 class Foo(object): pass obj = Foo() class Boo(Foo): pass class Coo(Boo): pass obj = Boo() ...
- mysql 数据库数据订正
mysql 数据库数据订正 http://blog.itpub.net/22664653/viewspace-717175/ 工作过程中时常遇到数据订正的需求,该操作本身不难.操作时要求能够保持回滚~ ...
- [py][mx]django注册-邮件激活
人生,学习,就是一段旅途, 说是放弃,其实是自信心作祟. 因为不同时间段状态,譬如晚上和早上刚来状态不一样.做相同事情容器失去自信而放弃. 坚持可以打破这个魔咒 还有就是有些问题得分割, 不要让压死牛 ...
- Fortran入门:Windows平台的Fortran编译器安装和使用
因为课程需要,今年开始学习FORTRAN语言.之前学校的计算概论用的是C,后来又学了C++和Python作为面向对象的工具,数值计算方面主要通过学校的许可证用的MATLAB.因为专业侧重数值模拟和反演 ...
- Qt事件过滤器和事件的发送
事件过滤器 /* *事件过滤器不是类,仅仅是QObject类的两个函数:installEventFilter() 和 eventFilter() . *下面讲个例子: * 监视过滤 textEdit的 ...
- mysql主从数据库不同步的2种解决方法 (转载)
今天发现Mysql的主从数据库没有同步 先上Master库: mysql>show processlist; 查看下进程是否Sleep太多.发现很正常. show master status; ...
- promise-async-await
通常而言,这3个关键字 都是用来「优雅」的处理ajax异步请求的 //es6的时候promise诞生,很好的解决了嵌套回调地狱,改良方案为链式回调. // es2017的时候诞生了async.awai ...
- Linux root用户下不能打开Google-chrome的解决办法
在root下打开chrome会出现no sandbox的错误 解决方案: 1.找到google-chrome文件 在目录/opt/google/chrome 下 2.使用gedit打开该文件 最后一行 ...