代码:

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. 使用schemasync同步数据库表结构

    安装方式 wget http://www.schemasync.org/downloads/SchemaSync-0.9.4.tar.gz tar -xf SchemaSync-0.9.4.tar.g ...

  2. Python开发【笔记】:关闭线程的方法

    1.通过API进行线程关闭 import threading import time import inspect import ctypes def _async_raise(tid, exctyp ...

  3. function $(id) {}表示什么函数

    function $(id) {}表示什么函数 一.总结 1.就是简写,不然每次打document.getElementById很烦 二.问题 function $(id) {return docum ...

  4. 【Python】小练习

    1.python爬虫 (1)抓取一个新闻网上含有某一关键字的新闻,http://internasional.kompas.com/就是这个网站上面所有内容含有THAAD这个关键词的新闻 (2)爬取大众 ...

  5. [LeetCode] 310. Minimum Height Trees_Medium tag: BFS

    For a undirected graph with tree characteristics, we can choose any node as the root. The result gra ...

  6. Keepalived+HAproxy实现高可用负载均衡

    总概:       Keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务器的状态, ...

  7. sublime Text3在mac下设置窗口实现多标签

    打开Sublime Text3,点击左上角的Sublime Text3按钮,然后选择“Preferences”里面的“Settings-user” 在打开的配置文件里面,加入下面图中的这句代码即可&q ...

  8. input的text输入框设置大一点

    <input type="text" style="height:51px;width:449px;font-size:12px;">12可以随意改 ...

  9. Vue项目使用AES做加密

    1.先在vue项目中安装crypto-js 2.在项目中新建一个utils.js文件 3.utils.js文件中的内容 /** * 工具类 */ import Vue from 'vue' impor ...

  10. 024-linux中动态库libXXX.so

    1.动态库的概念.动态链接库与普通的程序相比而言,没有main函数,是一系列函数的实现.通过shared和fPIC编译参数生产so动态链接库文件.程序在调用库函数时,只需要连接上这个库即可. 2.动态 ...