代码:

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的更多相关文章

  1. 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>先创建 ...

  2. Linq 多表连接查询join

    在查询语言中,通常需要使用联接操作.在 LINQ 中,可以通过 join 子句实现联接操作.join 子句可以将来自不同源序列,并且在对象模型中没有直接关系(数据库表之间没有关系)的元素相关联,唯一的 ...

  3. LINQ TO SQL 中的join(转帖)

    http://www.cnblogs.com/ASPNET2008/archive/2008/12/21/1358152.html join对于喜欢写SQL的朋友来说还是比较实用,也比较容易接受的东西 ...

  4. 1122MySQL性能优化之 Nested Loop Join和Block Nested-Loop Join(BNL)

    转自http://blog.itpub.net/22664653/viewspace-1692317/ 一 介绍  相信许多开发/DBA在使用MySQL的过程中,对于MySQL处理多表关联的方式或者说 ...

  5. SQL JOIN\SQL INNER JOIN 关键字\SQL LEFT JOIN 关键字\SQL RIGHT JOIN 关键字\SQL FULL JOIN 关键字

    SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表 ...

  6. hadoop 多表join:Map side join及Reduce side join范例

    最近在准备抽取数据的工作.有一个id集合200多M,要从另一个500GB的数据集合中抽取出所有id集合中包含的数据集.id数据集合中每一个行就是一个id的字符串(Reduce side join要在每 ...

  7. 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 ...

  8. 图解SQL的inner join(join)、left join、right join、full outer join、union、union all的区别

    对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...

  9. Oracle 表的连接方式(1)-----Nested loop join和 Sort merge join

    关系数据库技术的精髓就是通过关系表进行规范化的数据存储,并通过各种表连接技术和各种类型的索引技术来进行信息的检索和处理. 表的三种关联方式: nested loop:从A表抽一条记录,遍历B表查找匹配 ...

  10. left join 和 left outer join 有什么区别?

    left join 是left outer join的简写,left join默认是outer属性的.outer join则会返回每个满足第一个(顶端)输入与第二个(底端)输入的联接的行.它还返回任何 ...

随机推荐

  1. Linux 程序后台运行

    例子: shadowsocks 程序后台运行: sslocal -c /etc/shadowsocks-libev/config.json > /dev/>& & 参考: ...

  2. LightOj 1118 - Incredible Molecules(两圆的交集面积)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1118 给你两个圆的半径和圆心,求交集的面积: 就是简单数学题,但是要注意acos得到的 ...

  3. Github常用命令【转】

    本地仓库(local repository) 创建一个本地仓库的流程: 为本地仓库创建一个目录 在目录中执行 git init 对本地仓库所做的改变(例如添加.删除文件等)首先加入到本地仓库的 Ind ...

  4. 【python-opencv】20-图像金字塔

    知识点介绍 图像金字塔原理: 高斯金字塔 拉普拉斯金字塔: 代码层面知识点:  cv2.PyrDown:降采样  cv2.PyrUp:升采样 高斯金字塔与拉普拉斯金字塔 图像金字塔是图像中多尺度表达的 ...

  5. linux,centOS,用LNMP搭建wordpress,更新固定连接--全流程

    下午到晚上的时间,买了个linux服务器,用的centOS系统,遇到各种问题! 1.用putty,ssh到vps后,根据网上命令,一步步下载并安装,具体步骤可以看一下网上教程,LNMP.org站上的教 ...

  6. WebDriver 常用操作

    1 浏览器操作 2 窗口和弹框操作 3 cookies 操作 4 简单对象的定位 5 页面元素操作 6 鼠标事件 7 键盘事件 1 浏览器操作 #属性: driver.current_url #用于获 ...

  7. 01_Python 基础课程安排

    Python 基础课程安排 目标 明确基础班课程内容 课程清单 序号 内容 目标 01 Linux 基础 让大家对 Ubuntu 的使用从很 陌生 达到 灵活操作 02 Python 基础 涵盖 Py ...

  8. 001-window版redis安装

    一.参考地址 官方地址:https://redis.io/ windows版本[学习使用]:https://github.com/MicrosoftArchive/redis 二.windows版re ...

  9. Elasticsearch Date类型使用技巧

    elasticsearch原生支持date类型.这里简单记录下使用的方法. 使用date类型可以用如下两种方式: 使用毫秒的时间戳,直接将毫秒值传入即可. 传入格式化的字符串,默认是ISO 8601标 ...

  10. pyrhon3与mysql:查、更、删49

    import pymysql conn = pymysql.connect(host=',db='jodb1',port=3307,charset='utf8') # 172.31.10.225 # ...