前言

  上一章节是查询,记录了简单的查询,比较看好的是分块、Dto映射和分页,除了简单的单表查询,更多的时候要用到联表查询,毕竟设计数据库是按照范式设计,FreeSql的联表操作有导航属性、Join联表和Sql联表等。

Init

  使用到联表,目前的Student表不够,新增一个Class表,同时新增Student表的ClassId字段和Class字段,数据库新增几条记录

查看代码
[Table(Name = "Student")]
public class Student
{
[Column(IsIdentity = true, IsPrimary = true)]
public long Id { get; set; } [Column(IsNullable = false, DbType = "varchar(20)")]
public string Name { get; set; } public int Age { get; set; } public StatusEnum Status { get; set; } public DateTime AddTime { get; set; } [Column(IsNullable =true,DbType = "varchar(100)")]
public string Remark { get; set; } public long ClassId { get; set; } public Class Class { get; set; }
} public enum StatusEnum
{
Normal = 1, Freeze = 2
} [Table(Name = "Class")]
public class Class
{
[Column(IsIdentity = true, IsPrimary = true)]
public long Id { get; set; } [Column(IsNullable = false, DbType = "varchar(20)")]
public string Name { get; set; } public List<Student> StudentList { get; set; }
}

连表查询

  利用导航属性字段进行连表查询,写法和sql很相似
_freeSql.Select<Student>()
.InnerJoin(x => x.Class.Id == x.ClassId)
.Where(x => x.Id > 10)
.ToList();
//SELECT a.[Id], a.[Name], a.[Age], a.[Status], a.[AddTime], a.[Remark], a.[Version], a.[ClassId], a__Class.[Id] as9, a__Class.[Name] as10
//FROM[Student] a
//INNER JOIN[Class] a__Class ON a__Class.[Id] = a.[ClassId]
//WHERE(a.[Id] > 10)
  
  联表查询后也能指定返回的字段,与单表使用方式一样
_freeSql.Select<Student, Class>()
.InnerJoin(x => x.t1.ClassId == x.t2.Id)
.Where(x => x.t1.Id > 10)
.ToList(x => new { Name=x.t1.Name, ClassName=x.t2.Name });
//SELECT a.[Name] as1, b.[Name] as2
//FROM[Student] a
//INNER JOIN[Class] b ON a.[ClassId] = b.[Id]
//WHERE(a.[Id] > 10)
 

自定义查询

  自定义Sql查询,使用Linq+Sql进行联表查询,可以做到使用字符串去拼接sql语句,包括表、条件、查询的字段,非常灵活
_freeSql.Select<Student>()
.InnerJoin("Class b on b.Id = a.ClassId")
.Where(x => x.Id > 10)
.Where("b.Id>0")
.ToList(x => new { Name = x.Name, ClassName = "b.Name" });
//SELECT a.[Name] as1, b.Name as2
//FROM[Student] a
//INNER JOIN Class b on b.Id = a.ClassId
//WHERE(a.[Id] > 10) AND(b.Id > 0)

子查询

_freeSql.Select<Student>()
.Where(a => _freeSql.Select<Class>().As("b").ToList(b => b.Id).Contains(a.ClassId))
.ToList();
//SELECT value from fn_listextendedproperty('MS_Description', 'schema', N'dbo', 'table', N'Class', NULL, NULL)
//SELECT a.[Id], a.[Name], a.[Age], a.[Status], a.[AddTime], a.[Remark], a.[Version], a.[ClassId]
//FROM[Student] a
//WHERE(((a.[ClassId]) in (SELECT b.[Id]
//FROM[Class] b)))

FreeSql学习笔记——4.联表的更多相关文章

  1. Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法

    Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法 昨天在开发的时候遇到个小问题,就是如何将Grid的内容与Form一起发送到服务器端.默认情况下,表单(F ...

  2. FreeSql (十七)联表查询

    FreeSql在查询数据下足了功能,链式查询语法.多表查询.表达式函数支持得非常到位. IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnect ...

  3. bootstrap学习笔记<五>(表单一)

    表单 bootstrap为表单提供三种样式:默认表单,水平表单,内联表单. <form class="form-horizontal" role="form&quo ...

  4. python3学习笔记(7)_listComprehensions-列表生成式

    #python3 学习笔记17/07/11 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #通过列表生成式可以生成格式各样的list,这种list 一 ...

  5. EXCEL 2010学习笔记 —— 数据透视表

    今天整理一下EXCEL2010 数据透视表的课程笔记,数据透视表可以对多组数据进行统计和整理,是一种基本的数据可视化工具. 记录6个方面的总结: 1.创建数据透视表 2.更改数据透视表的汇总方式 3. ...

  6. HTML5学习笔记<五>: HTML表单和PHP环境搭建

    HTML表单 1. 表单用于不同类型的用户输入 2. 常用的表单标签: 标签 说明 <form> 表单 <input> 输入域 <textarea> 文本域 < ...

  7. MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

  8. MySql 在cmd下的学习笔记 —— 有关多表查询的操作(内连接,外连接,交叉连接)

    mysql> create table test5( -> id int, ) -> )engine myisam charset utf8; Query OK, rows affe ...

  9. Yii学习笔记之四(表单验证 api 翻译)

    1.表单验证 对于用户输入的全部数据,你不能信任,必须加以验证. 全部框架如此.对于yii 能够使用函数  yii\base\Model::validate()  进行验证 他会返回boolean值的 ...

  10. MySQL学习笔记十三:表分区

    1.分区一般用于非常大的表,采用“分而治之”的策略,将一个很大的对象分成多个小对象进行管理,每个分区都是一个独立的对象. 分区使用分区键将数据根据范围值,特定列值或HASH值等规则分布在不同的分区中. ...

随机推荐

  1. Django之gunicorn部署

    安装: pip install gunicorn 启动应用: gunicorn -w 3 -k gthread -e DJANGO_SETTINGS_MODULE=settings.prod Serv ...

  2. php之编译安装

    1. 安装所需环境 yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng ...

  3. 使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试

    前言 在软件开发领域,性能基准测试是确保软件系统高效.稳定运行的重要环节.它可以帮助你评估应用程序的性能,了解其在不同条件下的响应时间.吞吐量.资源利用率等.通过基准测试,你可以确定系统在处理特定工作 ...

  4. AWMS(ApeosWare Management Suite)的一些配置信息

    富士胶片商业创新的富士施乐打印复印一体机,一般可用被称为亚特兰大(ApeosWare Management Suite)的管理软件. Windows Server 2012 上安装的SQLServer ...

  5. 一款开源、免费、美观的 Avalonia UI 原生控件库 - Semi Avalonia

    前言 最近发现DotNetGuide技术社区交流群有不少小伙伴在学习Avalonia,今天大姚给大家分享一款开源.免费.美观的 Avalonia UI 原生控件库:Semi Avalonia. Ava ...

  6. OSG开发笔记(三十七):OSG基于windows平台msvc2017x64编译器官方稳定版本OSG3.4.1搭建环境并移植Demo

    前言   自行编译的osg版本插件比较多,如果对版本没有特定要求,但是对环境编译器有特定要求,可以反向融合编译器符合要求的osg版本.   OSG下载过程   osg官网:http://www.osg ...

  7. 指针, C语言的精髓

    指针, C语言的精髓 莫队先咕几天, 容我先讲完树剖 (因为后面树上的东西好多都要用树剖求 LCA). 什么是指针 保存变量地址的变量叫做指针. 这是大概的定义, 但是Defad认为这个定义不太好理解 ...

  8. 解密prompt系列44. RAG探索模式?深度思考模式?

    前一阵多步RAG的风吹入了工业界,kimi推出了探索版本,各应用都推出了深度搜索,You.COM更是早就有了Genius的多步模式.其实都是类似multi-hop RAG的实现.之前学术界在讨论mul ...

  9. OpenEuler文件被锁定的解决方法|网卡修改不生效的解决办法

    欧拉系统(含centos等linux系统)修改文件,一直提示readonly,不让改.原因有可能是这个文件给锁定了. 解决方法: 使用以下两个命令: • chattr 改变文件属性 • lsattr ...

  10. 【数据库】MySQL概念性基础知识期末复习

    选择题 第一章 3 二维表结构--数据模型--关系数据模型 5 描述全部数据整体逻辑结构--模式 6 逻辑数据独立性--模式变,外模式和应用程序不变 7 物理数据独立性--内模式变,外模式和应用程序不 ...