利用EF Core的Join进行多表查询
背景
话说有这么一家子,老公养了一条狗,老婆养了一只猫。
数据库的设计
人表

宠物表

通过表可以知道,宠物通过Owner指向主人的Id。
问题来了,我要和故事开头一样,老公-狗,老婆-猫,对应起来,怎么查询呢?
有同学说这还不简单?两个遍历一下不就行了。
首先 取出 List<宠物>集合,再根据宠物的主人Id去查找对应的主人信息就好了。
如果这样设计,那么将会执行3次查询:
l 查出所有的宠物。
l 查出阿猫的主人。
l 查出阿狗的主人。
数据量不大还好,数据量要是大一点这是非常影响速度的。这时,我们可以用到EF Core所有的Join方法进行多表查询。
我的做法是定义了一个PetsDetails的类,其代码如下:
public class PetsDetails
{
/// <summary>
/// 宠物名称
/// </summary>
public string PetName { get; set; }
/// <summary>
/// 主人名称
/// </summary>
public string OwnerName { get; set; }
}
用EF 的Join方法进行多表查询:
[HttpGet]
public List<PetsDetails> Get()
{
return _context.Pets.Join(_context.Persons,pet=>pet.Owner,per=>per.Id,(pet,per)=>new PetsDetails
{
PetName = pet.Name,
OwnerName = per.Name
}).ToList();
}
执行结果如图:

成功取到了宠物对应的主人的名称。
好处
原本需要进行3次查询的,用了Join方法后一次查询即可取到所需要的结果。我们看看这条Sql语句的样子:

我们看到其实这个需求是EF通过再sql语句中执行INNER JOIN实现的。
完整项目代码:
https://github.com/liuzhenyulive/EF-CORE-JOIN-Demo
您的支持是我最大的动力,如果满意,请帮我点击推荐。
利用EF Core的Join进行多表查询的更多相关文章
- EF Core中Join可以进行子查询
我们来看看下面的代码,这个代码是一个INNER JOIN的EF Core查询,其中用SubCategory表INNER JOIN了SubCategoryLanguage表,但是我们需要在SubCate ...
- Asp.net core下利用EF core实现从数据实现多租户(1)
前言 随着互联网的的高速发展,大多数的公司由于一开始使用的传统的硬件/软件架构,导致在业务不断发展的同时,系统也逐渐地逼近传统结构的极限. 于是,系统也急需进行结构上的升级换代. 在服务端,系统的I/ ...
- Asp.net core下利用EF core实现从数据实现多租户(3): 按Schema分离 附加:EF Migration 操作
前言 前段时间写了EF core实现多租户的文章,实现了根据数据库,数据表进行多租户数据隔离. 今天开始写按照Schema分离的文章. 其实还有一种,是通过在数据表内添加一个字段做多租户的,但是这种模 ...
- 【asp.net core 系列】8 实战之 利用 EF Core 完成数据操作层的实现
0. 前言 通过前两篇,我们创建了一个项目,并规定了一个基本的数据层访问接口.这一篇,我们将以EF Core为例演示一下数据层访问接口如何实现,以及实现中需要注意的地方. 1. 添加EF Core 先 ...
- 利用EF和C#泛型实现通用分页查询
利用EF和C#泛型实现通用分页查询 Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (ORM) 解决方案,是微软的ORM框架.此框架将数据库中的 ...
- Asp.net core下利用EF core实现从数据实现多租户(2) : 按表分离
前言 在上一篇文章中,我们介绍了如何根据不同的租户进行数据分离,分离的办法是一个租户一个数据库. 也提到了这种模式还是相对比较重,所以本文会介绍一种更加普遍使用的办法: 按表分离租户. 这样做的好处是 ...
- EF Core中如何设置数据库表自己与自己的多对多关系
本文的代码基于.NET Core 3.0和EF Core 3.0 有时候在数据库设计中,一个表自己会和自己是多对多关系. 在SQL Server数据库中,现在我们有Person表,代表一个人,建表语句 ...
- EF Core 中多次从数据库查询实体数据,DbContext跟踪实体的情况
使用EF Core时,如果多次从数据库中查询一个表的同一行数据,DbContext中跟踪(track)的实体到底有几个呢?我们下面就分情况讨论下. 数据库 首先我们的数据库中有一个Person表,其建 ...
- MySQL select join on 连表查询和自连接查询
连表查询 JOIN ON 操作 描述 inner join 只返回匹配的值 right join 会从右表中返回所有的值, 即使左表中没有匹配 left join 会从左表中返回所有的值, 即使右表中 ...
随机推荐
- docker数据库
拉取镜像 # docker pull mysql: 创建docker数据库容器 # docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASS ...
- 回归模型效果评估系列1-QQ图
(erbqi)导语 QQ图全称 Quantile-Quantile图,也就是分位数-分位数图,简单理解就是把两个分布相同分位数的值,构成点(x,y)绘图:如果两个分布很接近,那个点(x,y)会分布在y ...
- applicationContext.xml最基本配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 蚂蚁爬杆问题 UVA 10881
算法入门经典训练指南上的题. 这里有必要讲一下蚂蚁爬杆问题:每只蚂蚁都有一个初始方向,相撞会转向,关键就是相撞的处理,由于速度并不会改变,两只蚂蚁相撞,可以看做,两只蚂蚁穿过对方,继续沿原方向前进,经 ...
- Python接口自动化测试 HTTP协议
一.HTTP协议简述 二.URL 三.请求 四.响应 五.消息报头 六.常见问题
- java I/O框架 (三)基本流
概述 基本流有字节输入输出流(InputStream,OutputStream),和字符输入输出流(Reader,Writer),它们都是抽象类,作为Java IO API中其他所有流的父类存在. 我 ...
- (转)Hanoi塔问题分析
转自:http://shmilyaw-hotmail-com.iteye.com/blog/2077098 简介 关于Hanoi塔问题的分析,在网上的文章都写烂了.之所以打算写这篇文章,更多的是针对这 ...
- 详解Java的自动装箱与拆箱(Autoboxing and unboxing)
一.什么是自动装箱拆箱 很简单,下面两句代码就可以看到装箱和拆箱过程 //自动装箱 Integer total = 99; //自定拆箱 int totalprim = total; 简单一点说,装箱 ...
- 基于全志H3芯片的ARM开发环境搭建
基于全志H3芯片的ARM开发环境搭建 最近买了个友善之臂的NanoPi M1板子,又在网上申请了个NanoPi NEO板子,这两个都是基于全志H3芯片的Crotex-A7四核ARM开发板,两个板子可以 ...
- R语言︱数据去重
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:unique对于一个向量管用,对于m ...