利用EF Core的Join进行多表查询
发布日期:2021-06-24 04:57:48 浏览次数:15 分类:技术文章

本文共 1075 字,大约阅读时间需要 3 分钟。

背景

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

数据库的设计

人表

 

宠物表

 

 

通过表可以知道,宠物通过Owner指向主人的Id。

 

问题来了,我要和故事开头一样,老公-狗,老婆-猫,对应起来,怎么查询呢?

有同学说这还不简单?两个遍历一下不就行了。

首先 取出 List<宠物>集合,再根据宠物的主人Id去查找对应的主人信息就好了。

如果这样设计,那么将会执行3次查询:

l  查出所有的宠物。

l  查出阿猫的主人。

l  查出阿狗的主人。

数据量不大还好,数据量要是大一点这是非常影响速度的。这时,我们可以用到EF Core所有的Join方法进行多表查询。

 

我的做法是定义了一个PetsDetails的类,其代码如下:

public class PetsDetails    {        ///         /// 宠物名称        ///         public string PetName { get; set; }        ///         /// 主人名称        ///         public string OwnerName { get; set; }    }

用EF 的Join方法进行多表查询:

[HttpGet]        public List
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

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

 

转载于:https://www.cnblogs.com/CoderAyu/p/8576822.html

转载地址:https://blog.csdn.net/weixin_30346033/article/details/96112247 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:the user operation is waiting for "Building workspace" to complete
下一篇:Educational Codeforces Round 22E

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月11日 10时05分12秒