Join和GroupJoin的区别

List<Atable> ainfo = new List<Atable>
{
new Atable{ AId=1, AName="A1", AAge="11" },
new Atable{ AId=2, AName="A2", AAge="12"},
new Atable{ AId=3, AName="A3",AAge="13"}
};
List<Btable> binfo = new List<Btable>()
{
new Btable{ BId=1, BName="B1", BAge="81" },
new Btable{ BId=3, BName="B3", BAge="83"},
new Btable{ BId=5, BName="B5",BAge="85"}
};

Join

官方释义:基于匹配键对两个序列的元素进行关联。使用默认的相等比较器对键进行比较。

这个与数据库中的INNER JOIN很类似,就是使用一个键(TKey)将两个集合关联起来,并对这两个集合的元素进行选择,作为结果输出。

            var info = ainfo.Join(binfo, //需要连接的数据源
a => a.AId,
b => b.BId,
(a, b) => new { a.AName, b.BName }); //获取自己定义类型的集合。
foreach (var item in info)
{
Console.WriteLine(item.AName + item.BName);
}

GroupJoin

官方释义: 基于键相等对两个序列的元素进行关联并对结果进行分组。使用默认的相等比较器对键进行比较。

这个与数据库的LEFT OUTER JOIN很类似。与Join的区别就是:GroupJoin内resultSelector的输入参数从TInner单个元素编程IEnumerable<TInner>元素集合,其他保持不变。用法与Join差不多,它也是基于TOuter.TKey及TInner.TKey的连接。

 var info = ainfo.GroupJoin(binfo,   //需要连接的数据源
Atable => Atable.AId, //通过AId指定数据源
Btable => Btable.BId, //通过BId指定数据源
(a, b) => new
{
a.AName,
binfos = b
}//创建结果相同的数据
).ToList(); foreach (var item in info)
{
foreach (var b in item.binfos)
{
Console.WriteLine(item.AName + "\t" + b.BName);
} }

  

LinqToSQL4的更多相关文章

随机推荐

  1. ajax与HTML5 history API实现无刷新跳转

    一.ajax载入与浏览器历史的前进与后退 ajax可以实现页面的无刷新操作,但是无法前进与后退,淡出使用Ajax不利于SEO.如今,HTML5让事情变得简单.当执行ajax操作时,往浏览器histor ...

  2. elasticsearch-6.4.3 集群搭建

    1.准备三台服务器,已安装好es. 2.修改服务集群配置如下 使用命令: vi elasticsearch.yml 如下: cluster.name: myes ###保证三台服务器节点集群名称相同 ...

  3. Qt configure 参数

    在编译QT前,可加各种参数来定制自己想要的QT库.这对需要裁减QT库的朋友来说非常重要.对于如何编译QT,可以参考:http://hi.baidu.com/agassi%5Fp/blog/item/4 ...

  4. Node.js与VUE安装及环境配置之Windows篇

    Node.js安装及环境配置之Windows篇 https://www.cnblogs.com/zhouyu2017/p/6485265.html Node.js安装及环境配置之Windows篇htt ...

  5. [Java复习] Spring Boot

    什么是Spring Boot? 传统SSH/SSM框架配置繁琐,有很多重复的模板配置,效率不高. Spring Boot快速创建可独立运行,生产级别的Spring应用程序. 主要是基于Spring家族 ...

  6. c++ Container print

    template<typename Container>void PrintContents(const Container& con) { Container::const_it ...

  7. Vs code调试Dart语言

    1.下载Dart SDK,地址:Dart Windows下载 安装稳定版本,安装完看看有没有配置系统变量. 2.在VS code中安装Dart和Code Runner插件: 3.如果Dart有乱码输出 ...

  8. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_15.RabbitMQ研究-与springboot整合-声明交换机和队列

    复制topic的代码 把常量都设置成public方便其他的类引用 ExchangeBuilder里面有4个方法分别对应四个交换机. 声明Email和短信的队列 队列绑定交换机 所以需要把Bean注入到 ...

  9. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_16-页面静态化-模板管理-模板制作

    这是轮播图的原始文件 运行门户需要把 nginx启动起来 单独运行轮播图.把里面的css的引用都加上网址的url 这就是单独访问到的轮播图的效果 轮播图模板的地址: 阶段5 3.微服务项目[学成在线] ...

  10. Redis CrackIT 入侵事件引发Linux 沦陷

    ▲针对全球6379端口的redis服务器做了扫描,结果如上图 如图开放在公网的redis的6379端口的ip总数有63443个.无密码认证的IP有43024个,在总数占比里达到67%.发现遭受到red ...