zoukankan      html  css  js  c++  java
  • 利用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

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

  • 相关阅读:
    一、入门实例
    十四、事物配置
    JAVA-调用http链接
    ORACLE 年龄计算到月份
    ORACLE和MYSQL 去重查询
    JAVA--将图片转为BASE64编码并返回thymeleaf页面
    JAVA--将图片保存至项目路径
    java--获取类加载路径和项目根路径
    excel执行INSERT和UPDATE操作语句
    c# 未能加载Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342
  • 原文地址:https://www.cnblogs.com/CoderAyu/p/8576822.html
Copyright © 2011-2022 走看看