LinQ Coding -- (5) (Join之内部联接查询)
Join:其实就是可以将来自不同源序列并且在对象模型中没有直接关系的元素相关联。
Join 子句有三种最常见的联接类型:内部联接,分组联接,左外部联接
本次介绍:内部联接
按照关系数据库的说法,“内部联接”产生一个结果集,对于该结果集内第一个集合中的每个元素,
只要在第二个集合中存在一个匹配元素,该元素就会出现一次。
如果第一个集合中的某个元素没有匹配元素,则它不会出现在结果集内。
Code Demo:
1.Single Join
2.Compound Join
3.Multiple Join
//Single Join
//将 A 对象与其 b2 为该 A 的 B 对象进行匹配。
private void SingleJoin()
{
Data

var query = from a in aa
join b in bb
on a equals b.b2
select new { selectA = a.a1, selectB = b.b1 };

foreach (var ab in query)
{
Console.WriteLine("{0} and {1}", ab.selectA, ab.selectB);
}
}
//使用复合键可基于多个属性来比较元素
private void CompoundJoin()
{
Data

///联接两个数据源,查找既是员工又是学生的记录
IEnumerable<String> query = from employee in employees
join dev in devs
on new { employee.FirstName, employee.LastName }
equals new { dev.FirstName, dev.LastName }
select employee.FirstName + " && " + employee.LastName;
foreach (string name in query)
Console.WriteLine(name);

}
//可以将任意数量的联接操作拼接在一起以执行多联接。
private void MultipleJoin()
{
Data

//从多联接查询可以看出来,就是一个多表join查询,呵呵
//第一个join与 Cat.Owner 匹配的Person 对象将Master与Cat进行匹配,
// 并返回包含 Person 对象和 Cat.Name 的匿名类型的结果。
//第二个join是拿“Person 对象和 Cat.Name 的匿名类型的序列”与Dog相关联,
// 而该复合键由 Person 类型的 Owner 属性和动物名字的首字母组成。
//该子句返回一个匿名类型序列,这些类型包含每个匹配对中的 Cat.Name 和 Dog.Name 属性。]
//由于这是一个内部联接,因此仅返回第一个数据源中那些在第二个数据源中具有匹配对象的对象。
//person相同的,catName与dogName首字母相同的结果。即只要两条.
var query = from person in people
join cat in cats
on person
equals cat.Owner
join dog in dogs
on new { Owner = person, Letter = cat.Name.Substring(0, 1) }
equals new { dog.Owner, Letter = dog.Name.Substring(0, 1) }
select new { CatName = cat.Name, DogName = dog.Name };

foreach (var obj in query)
{
Console.WriteLine("{0} && {1}", obj.CatName, obj.DogName);
}
}
Join 子句有三种最常见的联接类型:内部联接,分组联接,左外部联接
本次介绍:内部联接
按照关系数据库的说法,“内部联接”产生一个结果集,对于该结果集内第一个集合中的每个元素,
只要在第二个集合中存在一个匹配元素,该元素就会出现一次。
如果第一个集合中的某个元素没有匹配元素,则它不会出现在结果集内。
Code Demo:
1.Single Join
2.Compound Join
3.Multiple Join


























































分类:
LINQ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构