代码:

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. 如何下载Bilibili视频

    方法1: https://www.bilibili.com/video/av25940642 (源网址) https://www.ibilibili.com/video/av25940642 (新网址 ...

  2. Scala安装配置

    注:下载地址:http://downloads.typesafe.com/scala/2.11.6/scala-2.11.6.tgz?_ga=1.41078626.1125902863.1429259 ...

  3. java 8 学习资料

    出处: 总览 http://www.importnew.com/24300.html stream api 详解 : https://www.ibm.com/developerworks/cn/jav ...

  4. Linux下JDK、Tomcat安装及Web应用部署

    一.JDK的安装 1.检查一下系统中的jdk版本 [root@localhost software]# java -version 显示: openjdk version "1.8.0_10 ...

  5. CMSPRESS-PHP无限级分类

    原博文地址:http://blog.sina.com.cn/s/blog_75ad10100101mrv0.html 当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还 ...

  6. (转)spring boot整合redis

    一篇写的更清晰的文章,包括redis序列化:http://makaidong.com/ncjava/330749_5285125.html 1.项目目录结构 2.引入所需jar包 <!-- Sp ...

  7. AngularJS 表达式 对象和数组

    AngularJS 使用 表达式 把数据绑定到 HTML. AngularJS 表达式 AngularJS 表达式写在双大括号内:{{ expression }}. AngularJS 表达式把数据绑 ...

  8. [LeetCode] 804. Unique Morse Code Words_Easy tag: Hash Table

    International Morse Code defines a standard encoding where each letter is mapped to a series of dots ...

  9. matlab 怎么建立结构体数组?

    https://zhidao.baidu.com/question/537198107.html 怎么定义一个结构体数组,使数组的每个元素是一个结构体变量.像这样:a=(1,2)a(1)=struct ...

  10. pandas练习(二)------ 数据过滤与排序

    数据过滤与排序------探索2012欧洲杯数据 相关数据见(github) 步骤1 - 导入pandas库 import pandas as pd 步骤2 - 数据集 path2 = ". ...