FreeSql学习笔记——4.联表
前言
上一章节是查询,记录了简单的查询,比较看好的是分块、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; }
}
连表查询
_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)
自定义查询
_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.联表的更多相关文章
- Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法
Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法 昨天在开发的时候遇到个小问题,就是如何将Grid的内容与Form一起发送到服务器端.默认情况下,表单(F ...
- FreeSql (十七)联表查询
FreeSql在查询数据下足了功能,链式查询语法.多表查询.表达式函数支持得非常到位. IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnect ...
- bootstrap学习笔记<五>(表单一)
表单 bootstrap为表单提供三种样式:默认表单,水平表单,内联表单. <form class="form-horizontal" role="form&quo ...
- python3学习笔记(7)_listComprehensions-列表生成式
#python3 学习笔记17/07/11 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #通过列表生成式可以生成格式各样的list,这种list 一 ...
- EXCEL 2010学习笔记 —— 数据透视表
今天整理一下EXCEL2010 数据透视表的课程笔记,数据透视表可以对多组数据进行统计和整理,是一种基本的数据可视化工具. 记录6个方面的总结: 1.创建数据透视表 2.更改数据透视表的汇总方式 3. ...
- HTML5学习笔记<五>: HTML表单和PHP环境搭建
HTML表单 1. 表单用于不同类型的用户输入 2. 常用的表单标签: 标签 说明 <form> 表单 <input> 输入域 <textarea> 文本域 < ...
- MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
- MySql 在cmd下的学习笔记 —— 有关多表查询的操作(内连接,外连接,交叉连接)
mysql> create table test5( -> id int, ) -> )engine myisam charset utf8; Query OK, rows affe ...
- Yii学习笔记之四(表单验证 api 翻译)
1.表单验证 对于用户输入的全部数据,你不能信任,必须加以验证. 全部框架如此.对于yii 能够使用函数 yii\base\Model::validate() 进行验证 他会返回boolean值的 ...
- MySQL学习笔记十三:表分区
1.分区一般用于非常大的表,采用“分而治之”的策略,将一个很大的对象分成多个小对象进行管理,每个分区都是一个独立的对象. 分区使用分区键将数据根据范围值,特定列值或HASH值等规则分布在不同的分区中. ...
随机推荐
- 设计模式【3.1】-- 浅谈代理模式之静态、动态、cglib代理
代理模式:为其他对象提供一种代理以控制对这个对象的访问,在某种情况下,一个对象不适合或者不能够直接引用另一个对象,而代理对象可以在客户类和目标对象之间起到中介的作用. 可以这么理解:使用代理对象,是为 ...
- springboot 实现通用责任链模式
1.概述 在我们平时的工作中,填写分布填写数据,比如填入商品的基本信息,所有人信息,明细信息,这种情况就可以使用责任链模式来处理. 2.代码实现 2.1商品对象 public class Produc ...
- SpringBoot+logback 日志打印脱敏,正常获取对象不受影响
添加依赖 注意:springboot版本2.7.0 <dependency> <groupId>org.slf4j</groupId> <artifactId ...
- 【Amadeus原创】Docker安装Nginx,并配置端口转发,配置SSL
1,docker安装Nginx [root@hecs-29489 ~]# docker pull nginx Using default tag: latest latest: Pulling fro ...
- Vuex 面试题(2023-09-13更新)
谈谈你对 Vuex 的理解 什么是 Vuex? vuex 是 Vue 应用程序开发的状态管理插件,它采用集中式存储,管理应用的所有组件的状态 Vuex 解决了什么问题? 多个组件依赖于同一状态时,多层 ...
- Kafka Streams 在监控场景的应用与实践
作者:来自 vivo 互联网服务器团队- Pang Haiyun 介绍 Kafka Streams 的原理架构,常见配置以及在监控场景的应用. 一.背景 在当今大数据时代,实时数据处理变得越来越重要, ...
- 使用terraform管理Proxmox VE资源
terraform-proxmox 使用terraform管理proxmox资源 Using terraform to manage proxmox resources env: Proxmox VE ...
- 【PHP】连接数据库验证登陆
界面 <!doctype html> <html lang="en"> <head> <!-- Required meta tags -- ...
- java到报名的编码运行
Hello.java package a.b; import com.beyondiary.kit.KitConstant; public class Hello { public static vo ...
- springboot连接mysql报错errorCode 0, state 08S01
前言许久未维护的项目需要检查一些数据,重新运行项目发现有create connection SQLException ,具体报错信息是 errorCode 0, state 08S01 . Sprin ...