热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#LiNQ查询join连接

join 子句可用于将来自不同源序列并且在对象模型中没有直接关系的元素相关联。 唯一的要求是每个源中的元素需要共享某个可以进行比较以判断是否相等的值。测试数据代码 #region TestData

join 子句可用于将来自不同源序列并且在对象模型中没有直接关系的元素相关联。 唯一的要求是每个源中的元素需要共享某个可以进行比较以判断是否相等的值。


测试数据代码


#region TestData

public class Student
{
public string StudentName;
public int GradeId;
}
public class Grade
{
public int ID;
public string GradeName;
}
List students = new List()
{
new Student {StudentName="zs", GradeId =1},
new Student {StudentName="ls", GradeId = 1},
new Student {StudentName="ww", GradeId = 2}
};
List grades = new List()
{
new Grade {ID = 1, GradeName ="一年级"},
new Grade {ID = 2, GradeName ="二年级"},
new Grade {ID = 3, GradeName ="三年级"}
};

#endregion

内连接


内部同等连接,下面为演示代码,缺少了三年级


void Innerjoin ()
{
var innerQuery = from grade in grades
join student in students on grade.ID equals student.GradeId
select new { StudentName = student.StudentName, GradeName = grade.GradeName };
foreach (var item in innerQuery)
{
Console.WriteLine($"班级:{item.GradeName},有学生{item.StudentName}");
}
}



C# LiNQ 查询 join连接


图片.png


分组连接


分组联接会生成分层的结果序列,该序列将左侧源序列中的元素与右侧源序列中的一个或多个匹配元素相关联。 分组联接没有等效的关系术语;它本质上是一个对象数组序列。


如果在右侧源序列中找不到与左侧源中的元素相匹配的元素,则 join 子句会为该项生成一个空数组。 因此,分组联接基本上仍然是一种内部同等联接,区别在于分组联接将结果序列组织为多个组。


void Groupjoin()
{
var innerQuery = from grade in grades
join student in students on grade.ID equals student.GradeId into student_grade
select new { StudentData = from student2 in student_grade orderby student2.GradeId select student2 , GradeName = grade.GradeName };
foreach (var item in innerQuery)
{
Console.WriteLine("班级内有哪些人:");
foreach (var studentItem in item.StudentData)
{
Console.WriteLine($"班级:{item.GradeName},有学生{studentItem.StudentName}");
}

}
}



C# LiNQ 查询 join连接


图片.png


从上图可以看到,多加了一句前面的打印,这个 关于三年级的数组肯定是存在的,但是是空的数据,如果没有数据,得到的结果就跟内连接一致。


左外连接


在左外部联接中,将返回左侧源序列中的所有元素,即使右侧序列中没有其匹配元素也是如此。 若要在 LINQ 中执行左外部联接,请结合使用 DefaultIfEmpty 方法与分组联接,指定要在某个左侧元素不具有匹配元素时生成的默认右侧元素。 可以使用 null 作为任何引用类型的默认值,也可以指定用户定义的默认类型。


void LeftOutJoin()
{
var innerQuery = from grade in grades
join student in students on grade.ID equals student.GradeId into student_grade
from studentData in student_grade.DefaultIfEmpty(new Student { StudentName = "没有学生哦!" })
select new { StudentData = studentData, GradeName = grade.GradeName };
foreach (var item in innerQuery)
{


Console.WriteLine($"班级:{item.GradeName},有学生{item.StudentData.StudentName}");

}
}



C# LiNQ 查询 join连接


图片.png



从上面看到左外连接,默认出一个值,可以防止没有数组出现问题。




推荐阅读
  • 使用Pandas高效读取SQL脚本中的数据
    本文详细介绍了如何利用Pandas直接读取和解析SQL脚本,提供了一种高效的数据处理方法。该方法适用于各种数据库导出的SQL脚本,并且能够显著提升数据导入的速度和效率。 ... [详细]
  • 开发笔记:9.八大排序
    开发笔记:9.八大排序 ... [详细]
  • 本文详细介绍了 iBatis.NET 中的 Iterate 元素,它用于遍历集合并重复生成每个项目的主体内容。通过该元素,可以实现类似于 foreach 的功能,尽管 iBatis.NET 并未直接提供 foreach 标签。 ... [详细]
  • 本文详细介绍了Java中的输入输出(IO)流,包括其基本概念、分类及应用。IO流是用于在程序和外部资源之间传输数据的一套API。根据数据流动的方向,可以分为输入流(从外部流向程序)和输出流(从程序流向外部)。此外,还涵盖了字节流和字符流的区别及其具体实现。 ... [详细]
  • MySQL DateTime 类型数据处理及.0 尾数去除方法
    本文介绍如何在 MySQL 中处理 DateTime 类型的数据,并解决获取数据时出现的.0尾数问题。同时,探讨了不同场景下的解决方案,确保数据格式的一致性和准确性。 ... [详细]
  • HBase运维工具全解析
    本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ... [详细]
  • 本文将深入探讨如何在不依赖第三方库的情况下,使用 React 处理表单输入和验证。我们将介绍一种高效且灵活的方法,涵盖表单提交、输入验证及错误处理等关键功能。 ... [详细]
  • 华为USG基于源地址的多出口策略路由配置
    网络拓扑如下:组网情况:企业用户主要有技术部(VLAN10)和行政部(VLAN20),通过汇聚交换机连接到USG。企业分别通过两个不同运营商(ISP1和ISP2)连接到 ... [详细]
  • 20100423:Fixes:更新批处理,以兼容WIN7。第一次系统地玩QT,于是诞生了此预备式:【QT版本4.6.0&#x ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本题旨在通过给定的评级信息,利用拓扑排序和并查集算法来确定全球 Tetris 高手排行榜。题目要求判断是否可以根据提供的信息生成一个明确的排名表,或者是否存在冲突或信息不足的情况。 ... [详细]
  • 给定一个整数数组arr,找到min(b)的总和,其中b的范围为arr的每个(连续)子数组。由于答案可能很大,因此返回答案模10^9+7。classSolution{publicin ... [详细]
  • 本文介绍了如何使用Java中的同步方法和同步代码块来实现两个线程的交替打印。一个线程负责打印1到52的数字,另一个线程负责打印A到Z的字母,确保输出顺序为12A34B...5152Z。 ... [详细]
  • 本文详细解释了华为ENSP模拟器中常用的命令,涵盖用户模式、系统模式、接口模式和地址池视图模式下的操作。这些命令对于进行计算机网络实验至关重要,帮助用户更好地理解和配置路由器及PC机的通信。 ... [详细]
author-avatar
小乌龟和小土鳖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有