1.  Concat() – 串联序列(有重复项)

 var healthFoods = new List<string> { "fruits", "vegetables", "grains", "proteins" };

 var myFoods = new List<string> { "grains", "proteins", "M&Ms", "soda" };

 var healthyFirst = healthFoods.Concat(myFoods); // 返回序列: fruits, vegetables, grains, proteins, grains, proteins, M&Ms, soda

var mineFirst = myFoods.Concat(healthFoods);// 返回序列: grains, proteins, M&Ms, soda, fruits, vegetables, grains, proteins

2. Union() – 串联序列(无重复项)

 var healthyFirst = healthFoods.Union(myFoods);// 返回序列: fruits, vegetables, grains, proteins, M&Ms, soda

 var mineFirst = myFoods.Union(healthFoods);// 返回序列: grains, proteins, M&Ms, soda, fruits, vegetables

3.Zip() – 简单一对一的联接(注:Employee 和Seat是两个对象)
var employees = new List<Employee>

    {

         new Employee { Id = 13, Name = "John Doe", Salary = 13482.50 },
new Employee { Id = 42, Name = "Sue Smith", Salary = 98234.13 },
new Employee { Id = 99, Name = "Jane Doe", Salary = 32421.12 } }; var seats = new List<Seat>
{
new Seat { Id = 1, Cost = 42 },
new Seat { Id = 2, Cost = 42 },
new Seat { Id = 3, Cost = 100 },
new Seat { Id = 4, Cost = 100 },
new Seat { Id = 5, Cost = 125 },
new Seat { Id = 6, Cost = 125 },
}; //接下来使用Zip()
var seatingAssignments = employees.Zip(seats, (e, s) => new { EmployeeId = e.Id, SeatId = s.Id });
foreach (var seat in seatingAssignments)
{
Console.WriteLine("雇员: " + seat.EmployeeId + " 预约了座位 " + seat.SeatId);

}
//运行结果(注:一旦到达较短序列的最后一项,它就会立即停止)

雇员: 13 预约了座位1

雇员: 42 预约了座位2

雇员: 99 预约了座位3

4.Join() – 满足条件的联接(注:Employee和Badge是两个对象)

var employees = new List<Employee>
{
new Employee { Id = 13, Name = "John Doe", Salary = 13482.50 },
new Employee { Id = 42, Name = "Sue Smith", Salary = 98234.13 },
new Employee { Id = 99, Name = "Jane Doe", Salary = 32421.12 }
};
var badges = new List<Badge>
{
new Badge { EmployeeId = 10, BadgeNumber = 1 },
new Badge { EmployeeId = 13, BadgeNumber = 2 },
new Badge { EmployeeId = 20, BadgeNumber = 3 },
new Badge { EmployeeId = 25, BadgeNumber = 4 },
new Badge { EmployeeId = 42, BadgeNumber = 5 },
new Badge { EmployeeId = 10, BadgeNumber = 6 },
new Badge { EmployeeId = 13, BadgeNumber = 7 },
};
//接下来使用Join()
var badgeAssignments = employees.Join(badges, e => e.Id, b => b.EmployeeId,  (e, b) => new { e.Name, b.BadgeNumber });

 foreach (var badge in badgeAssignments)
{
Console.WriteLine("Name: " + badge.Name + " has badge " + badge.BadgeNumber);
}
返回结果:(注:不会返回Jane Doe的信息)
Name: John Doe has badge 2
Name: John Doe has badge 7
Name: Sue Smith has badge 5
5.GroupJoin() – 适用于一对多的条件联接

var badgeAssignments = employees.GroupJoin(b adges, e => e.Id, b => b.EmployeeId, (e, bList) => new { Name = e.Name, Badges = bList.ToList() }); 

foreach (var assignment in badgeAssignments) 
{
Console.WriteLine(assignment.Name + " has badges:"); if (assignment.Badges.Count > 0)
{
         foreach (var badge in assignment.Badges)
{
Console.WriteLine("\tBadge: " + badge.BadgeNumber);
}
}
else { Console.WriteLine("\tNo badges."); }
} //输出结果
John Doe has badges:

         Badge: 2

         Badge: 7

 Sue Smith has badges:

         Badge: 5

 Jane Doe has badges:

         No badges.

C#联接序列的更多相关文章

  1. .NET LINQ 联接运算

    联接运算      将两个数据源“联接”就是将一个数据源中的对象与另一个数据源中共享某个通用特性的对象关联起来.      当查询所面向的数据源相互之间具有无法直接领会的关系时,联接就成为一项重要的运 ...

  2. SQL夯实基础(八):联接运算符算法归类

    今天主要介绍三个常用联接运算符算法:合并联接(Merge join),哈希联接(Hash Join)和嵌套循环联接(Nested Loop Join).(mysql至8.0版本,都只支持Nested ...

  3. Oracle基础 12 对象 objects 同义词/序列/试图/索引

    --创建同义词create public synonym employees for hr.employees;  --公共同义词需要 create public synonym 权限 表的所有用户授 ...

  4. LINQ查询表达式(4) - LINQ Join联接

    内部联接 按照关系数据库的说法,“内部联接”产生一个结果集,对于该结果集内第一个集合中的每个元素,只要在第二个集合中存在一个匹配元素,该元素就会出现一次. 如果第一个集合中的某个元素没有匹配元素,则它 ...

  5. sqlserver 联接查询的一些注意点

    1.内连接的安全性 (1) inner join 是ANSI SQL-92 语法.等值联接是ANSI SQL-89 的语法 ,两者已相同方式解释.在性能上没有差别 (2)但是强烈建议使用ANSI SQ ...

  6. 【夯实PHP基础】UML序列图总结

    原文地址 序列图主要用于展示对象之间交互的顺序. 序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色 ...

  7. Windows10-UWP中设备序列显示不同XAML的三种方式[3]

    阅读目录: 概述 DeviceFamily-Type文件夹 DeviceFamily-Type扩展 InitializeComponent重载 结论 概述 Windows10-UWP(Universa ...

  8. SQL Server-外部联接基础回顾(十三)

    前言 本节我们继续讲讲联接类型中的外部联接,本节之后我们将讲述有关联接性能以及更深入的知识,简短内容,深入的理解,Always to review the basics. 外部联接 外部联接又分为左外 ...

  9. SQL Server-交叉联接、内部联接基础回顾(十二)

    前言 本节开始我们进入联接学习,关于连接这一块涉及的内容比较多,我们一步一步循序渐进学习,简短内容,深入的理解,Always to review the basics. 交叉联接(CROSS JOIN ...

随机推荐

  1. 回溯---Permutations II

    47.Permutations II (Medium)](https://leetcode.com/problems/permutations-ii/description/) [1,1,2] hav ...

  2. C# System.Web.Caching.Cache类 缓存 各种缓存依赖

    原文:https://www.cnblogs.com/kissdodog/archive/2013/05/07/3064895.html Cache类,是一个用于缓存常用信息的类.HttpRuntim ...

  3. 数据分析之pandas(1)

    一.Pandas的数据结构 1.Series (1)类似于一维数组 (2)通过list构建Series ser_obj=pd.Series(range(10)) (3)pandas数据结构案例

  4. 【JAVA】增强for循环for(int a : arr)

    介绍 这种有冒号的for循环叫做foreach循环,foreach语句是java5的新特征之一,在遍历数组.集合方面,foreach为开发人员提供了极大的方便. foreach语句是for语句的特殊简 ...

  5. STM32之红外遥控信号自学习实现

    一.序言 很早前就想实现这个红外遥控自学习的这个实验,用于来自己控制房子里如空调等红外遥控设备的自动化,NEC的标准到具体的产品上可能就被厂家定义为不一样了,所以自学习就应该是接收到什么就发送什么,不 ...

  6. 03.LinuxCentOS系统root目录LVM磁盘扩容

    根目录LVM扩容操作步骤: [root@centos7 ~]# df -lh文件系统 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root 50G 7.7G 43G 6% / ...

  7. flask之url_for函数

    一:url_for函数 干什么的?传入函数名,得到函数的路由地址(访问视图函数的地址) from flask import Flask from flask import url_for app = ...

  8. selenium 自动化的坑(4)

    今天要讲的坑是....输入框有请求的. 问题是这样的,我们公司的业务有些输入框选项是联想的,这些联想都会发送请求,怎么办呢? 先 正常输入,然后强制等待几秒,最好多等会,谁知道第三方会不会有问题,这里 ...

  9. ELK Stack

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11488404.html ELK workflow log -> filebeat -> l ...

  10. [洛谷P1353] 跑步Running

    问题描述 奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1 <= N <= 10,000)分钟的晨跑.在每分钟的开始,贝茜会选择下一分钟是用来跑步 ...