C# Linq 左外联

假设我们有一个Student类,具有姓名、年龄、班级Id三个属性
还有一个Class类,具有Id,班级名两个属性

现要查找学生姓名、年龄和其所在班级名,因此需要做一个Student表左联Class表的操作

方式一:

var results = from s in studentsjoin c in classes on s.ClassId equals c.Id into scsfrom sc in scs.DefaultIfEmpty()select new { Name = s.Name, Age = s.Age, ClassName = sc?.ClassName ?? string.Empty };

方式二:

var results = students.GroupJoin(classes,s => s.ClassId,c => c.Id,(s, cs) => new{Name = s.Name,Age = s.Age,ClassName = cs.ElementAtOrDefault(0) is null ? string.Empty : cs.ElementAt(0).ClassName});

完整代码演示:

using System;
using System.Collections.Generic;
using System.Linq;public class Student
{public string Name { get; set; }public int Age { get; set; }public int ClassId { get; set; }
}public class Class
{public int Id { get; set; }public string ClassName { get; set; }
}public class Program
{public static void Main(){List<Student> students = new List<Student>(){new Student(){Name = "B", Age = 18, ClassId = 1},new Student(){Name = "C", Age = 19, ClassId = 2},new Student(){Name = "A", Age = 20, ClassId = 3},new Student(){Name = "D", Age = 20, ClassId = 4},new Student(){Name = "E", Age = 20, ClassId = 5},};List<Class> classes = new List<Class>(){new Class(){ Id = 1, ClassName = "1班"},new Class(){ Id = 2, ClassName = "2班"},new Class(){ Id = 3, ClassName = "3班"},};//方式一://var results = from s in students//              join c in classes on s.ClassId equals c.Id into scs//              from sc in scs.DefaultIfEmpty()//              select new { Name = s.Name, Age = s.Age, ClassName = sc?.ClassName ?? string.Empty };//方式二:var results = students.GroupJoin(classes,s => s.ClassId,c => c.Id,(s, cs) => new{Name = s.Name,Age = s.Age,ClassName = cs.ElementAtOrDefault(0) is null ? string.Empty : cs.ElementAt(0).ClassName});foreach (var result in results){Console.WriteLine($"{result.Name} {result.Age} {result.ClassName}");}}
}

C# Linq 左外联相关推荐

  1. join操作-内联,左外联,右外联,交叉联,全联

    在数据库中新建三张表格: T1 T2 T3 普通查询: select * from T1, T3 where T1.user_id = T3.user_id 结果: ----------------- ...

  2. Linq 左连接 内连接

    //左连接 from a in employeeList let u = from b in employeeList2         where a.ID.Equals(b.ID)         ...

  3. Linq 左连接 left join

    var APPQuery = aa.query(); var ValidQuery = bb.query();var query = from o in APPQueryjoin v in Valid ...

  4. LINQ学习笔记之四:查询内存对象

    附上WORD文档,从这里下载. 查询内存对象 这一章中主要介绍了使用LINQ查询内存对象的一些基本语法.在下一章将会有更高级的用法介绍.本章中的示例数据是一个简单的出版社信息.这里是数据文件.下面的图 ...

  5. linq to entity 基础

    部分摘抄  http://www.cnblogs.com/nikymaco/archive/2012/07/11/2585594.html linq(语言集成查询)在对象领域和数据领域之间架起了一座桥 ...

  6. .net core精彩实例分享 -- LINQ

    文章目录 介绍 具体案例 将对象转为字典集合 将原始序列进行分组 按员工所属部门 DefaultIfEmpty方法的作用 将分组后的序列重新排序 使用并行LINQ 总结 介绍 随着.net core越 ...

  7. mysql 左连接 理解_深入理解SQL的四种连接-左外连接、右外

    推荐:解析:内联,左外联,右外联,全连接,交叉连接的区别 本篇文章是对内联,左外联,右外联,全连接,交叉连接的区别进行了详细的分析介绍,需要的朋友参考下 连接分为:内连接.外连接.交叉连接 一.内连接 ...

  8. MVC Tutorial Movie DIY

    Razor cshtml Razor cshtml Razor即cshtml,是MVC的视图设计引擎. view 目录下的 _ViewStart.cshtml @{ Layout = "~/ ...

  9. hibernate关联关系(一对多)

    什么是关联(association) 关联指的是类之间的引用关系.如果类A与类B关联,那么被引用的类B将被定义为类A的属性.例如: class B{private String name;}publi ...

  10. oracle将查询结果声明为伪表,Oracle查询操作(增删改查,伪表,高级查询)实例讲解...

    SQL查询操作:增删改查 一.SQL操作符 算术操作符 + - * / 比较操作符 = != < > <= >= BETWEEN--AND IN LINK IS NULL 逻辑 ...

最新文章

  1. DOM对象和内置对象(中)
  2. LeetCode 543二叉树的直径-简单
  3. scroll-view组件bindscroll实例应用:自定义滚动条
  4. python 把numpy.ndarray转为图像_Python 让蔡徐坤在我的命令行里打篮球?打得还不错...
  5. linux mysql 修改密码之后还是不能登录_怎样在Linux下搭建接口自动化测试平台?...
  6. MFC画图(画线、画矩形、画刷画笔的使用)
  7. 一次性杯子机器人挂件手工制作_变废为宝 ———环保笔筒制作
  8. elk-可视化图标(nginx)
  9. [原]Greenplum failed segment的恢复方法
  10. 基于lvs实现的高并发负载的实战
  11. 2021SC@SDUSC Zxing开源代码(十)Data Matrix二维码(三)
  12. 常见光纤接头LC、FC、SC、ST
  13. 德国海曼HTPA 32x32d热成像传感器代替MLX90640之传感器数据读取和计算
  14. java实现计算器_java高级计算器的实现
  15. 软件测试周刊(第52期):世事多难料,唯独花期会如期。
  16. 红米android10参数,红米10x5g手机参数红米10x5g手机参数有哪些
  17. 10个谈话技巧让你平步青云(转贴)
  18. sql——如何将html代码存入数据库中
  19. 常用开源库收集+网站收集
  20. 华米科技再发“芯”品,能否唤起智能穿戴设备生态繁荣?

热门文章

  1. 冗余技术----热备份网关协议
  2. 云原生虚拟网络之 VXLAN 协议
  3. Jmeter 线程数、Ramp-Up、循环次数 详解
  4. android:layout_weight=1,Android:LinearLayout布局中Layout_weight的深刻理解
  5. 【NUC980开发板DIY项目大挑战】串口服务器
  6. vue 直接访问静态图片_在使用vue中实现本地静态图片路径(详细教程)
  7. MongoDB World 2016参会全记录
  8. 基于CNN+tensorflow对搜狐新闻进行分类并对函数进行封装
  9. Centos 8 安装 Openbravo 之安装 httpd mod_jk
  10. 用于Red Hat Enterprise Linux 6 (AMD64/EM64T)的HP智能阵列B140i SATA RAID控制器驱动程序 下载该文件即表示您同意惠普软件许可协议的条款和条件。