利用EF Core的Join进行多表查询

简介: 背景 话说有这么一家子,老公养了一条狗,老婆养了一只猫。 数据库的设计 人表   宠物表     通过表可以知道,宠物通过Owner指向主人的Id。   问题来了,我要和故事开头一样,老公-狗,老婆-猫,对应起来,怎么查询呢? 有同学说这还不简单?两个遍历一下不就行了。

背景

话说有这么一家子,老公养了一条狗,老婆养了一只猫。

数据库的设计

人表

 

宠物表

 

 

通过表可以知道,宠物通过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

您的支持是我最大的动力,如果满意,请帮我点击推荐。

 

相关文章
|
SQL
EF框架-SQL语句 查询与修改
EF框架-SQL语句 查询与修改
56 0
|
6月前
|
SQL Oracle 关系型数据库
Oracle查询优化-left join、right join、inner join、full join和逗号的区别
【1月更文挑战第5天】【1月更文挑战第13篇】实际查询时,多表联查是常规操作,但是连接方式有多种。
538 0
|
SQL
07SQL - letf join 和 inner join 的 区别
07SQL - letf join 和 inner join 的 区别
58 0
|
SQL
★SQL高级教程(2)——Alias、JOIN、INNER JOIN...(建议收藏)★下
★SQL高级教程(2)——Alias、JOIN、INNER JOIN...(建议收藏)★下
126 0
|
SQL 数据库
★SQL高级教程(2)——Alias、JOIN、INNER JOIN...(建议收藏)★上
★SQL高级教程(2)——Alias、JOIN、INNER JOIN...(建议收藏)★上
183 0
|
SQL 数据挖掘 Linux
awk实现类sql的join操作
awk实现类sql的join操作
152 0
|
SQL 语音技术 数据库
SQL基础【十五、join、Inner join、Left join、Right join、Full join】
SQL基础【十五、join、Inner join、Left join、Right join、Full join】
162 0
SQL基础【十五、join、Inner join、Left join、Right join、Full join】
|
存储 Web App开发 前端开发
EF 利用PagedList进行分页并结合查询 方法2
微软提供了PagedList分页,相信大家在网上也能搜索一大堆关于pagedList用法的博客,论坛。但是,在使用的过程中一不小心,就会掉入pagedList某种常规用法的陷阱。 我所说的某种常规用法是指如下方法(也可以参考我的博客:PagedList 分页用法): 代码如下: using System; using System.
959 0