lambda多表联合查询

之前lambda用的不多,但是lambda表达式确实很好用,今天写了个示例,简单的用一下Join。
新建三个类,UserPhone还有一个查询的结果UserDto

 class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
    }
 class Phone
    {
        public int UserId { get; set; }
        public string PhoneNumber { get; set; }

        public Type? Type;
    }
  class UserDto
    {
        public string Name { get; set; }
        public string Gender { get; set; }
        public string PhoneNumber { get; set; }
        public string PhoneType { get; set; }

        public override string ToString()
        {
            return string.Format("Name={0},Gender={1},PhoneNumber={2},PhoneType={3}", Name, Gender, PhoneNumber, PhoneType);
        }
    }

还有一个枚举

  enum Type
    {
        联通=1,
        移动=2,
        电信=3

    }

然后是需要初始化一些值。

 List<User> users = new List<User>() {
               new User{Id=1, Name="张三", Gender="男" },
               new User{Id=2, Name="李四",Gender="男"},
               new User{Id=3, Name="王五",Gender="男" },
               new User{Id=4, Name="赵柳",Gender="女" },
               new User{Id=5, Name="钱七",Gender="男" }
            };
            List<Phone> phones = new List<Phone>() {
               new Phone{ UserId=1, PhoneNumber="13000000000", Type=Type.电信 },
               new Phone{ UserId=2, PhoneNumber="13000000001", Type=Type.联通 },
               new Phone{ UserId=3, PhoneNumber="13000000002", Type=Type.移动 },
               new Phone{ UserId=4, PhoneNumber="13000000003", Type=Type.电信 },
            };

好了,准备工作做好了,接下来lambda就该登场了,由于类属性比较简单,所以查询也比较简单,具体的使用还要结合具体的业务场景。

Question one:查询用联通用户的姓名,性别,手机号,电话类型

  //查询用联通手机号的用户的姓名,性别,手机号,电话类型
var userdto = users.Join(phones, t => t.Id, p => p.UserId, (t, p) => new UserDto {
        Name = t.Name,
        Gender = t.Gender,
        PhoneNumber = p.PhoneNumber,
        PhoneType = p.Type.ToString()
    }).Where(t => t.PhoneType == "联通");

简单说一下Join,Join的前三个参数分别表示,需要连接的另一个数据集,以及两个表相互关联的属性,我这里明显User下的IdPhone下的UserId是对应的,类型一定要是一样的,不然会报编译错误。这里相当于是把两个数据集按照IdUserId的对应关系放到UserDto中,然后在UserDto中进行查询。

Question two:查询张三的姓名,性别,手机号,电话类型

 //查询张三的姓名,性别,手机号,电话类型
var userdto1 = users.Where(t=>t.Name=="张三").Join(phones, t => t.Id, p => p.UserId, (t, p) => new UserDto
{
    Name = t.Name,
    Gender = t.Gender,
    PhoneNumber = p.PhoneNumber,
    PhoneType = p.Type.ToString()
});

先查询User然后连接Phone
这里只是一点简单的使用,熟悉下Join以及lambda表达式的用法。
完整代码如下,可以新建个控制台应用程序,直接粘过去就行。

using System;
using System.Collections.Generic;
using System.Linq;

namespace lambda多表联合查询
{
    class Program
    {
        static void Main(string[] args)
        {
            List<User> users = new List<User>() {
               new User{Id=1, Name="张三", Gender="男" },
               new User{Id=2, Name="李四",Gender="男"},
               new User{Id=3, Name="王五",Gender="男" },
               new User{Id=4, Name="赵柳",Gender="女" },
               new User{Id=5, Name="钱七",Gender="男" }
            };
            List<Phone> phones = new List<Phone>() {
               new Phone{ UserId=1, PhoneNumber="13000000000", Type=Type.电信 },
               new Phone{ UserId=2, PhoneNumber="13000000001", Type=Type.联通 },
               new Phone{ UserId=3, PhoneNumber="13000000002", Type=Type.移动 },
               new Phone{ UserId=4, PhoneNumber="13000000003", Type=Type.电信 },
            };

            //查询用联通手机号的用户的姓名,性别,手机号,电话类型
            var userdto = users.Join(phones, t => t.Id, p => p.UserId, (t, p) => new UserDto {
                    Name = t.Name,
                    Gender = t.Gender,
                    PhoneNumber = p.PhoneNumber,
                    PhoneType = p.Type.ToString()
                }).Where(t => t.PhoneType == "联通");

            //查询张三的姓名,性别,手机号,电话类型
            var userdto1 = users.Where(t=>t.Name=="张三").Join(phones, t => t.Id, p => p.UserId, (t, p) => new UserDto
            {
                Name = t.Name,
                Gender = t.Gender,
                PhoneNumber = p.PhoneNumber,
                PhoneType = p.Type.ToString()
            });
            foreach (var item in userdto)
            {
                Console.WriteLine(item.ToString());
            }
            Console.ReadKey();
        }
    }
    class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
    }
    class Phone
    {
        public int UserId { get; set; }
        public string PhoneNumber { get; set; }

        public Type? Type;
    }
    enum Type
    {
        联通=1,
        移动=2,
        电信=3

    }

    class UserDto
    {
        public string Name { get; set; }
        public string Gender { get; set; }
        public string PhoneNumber { get; set; }
        public string PhoneType { get; set; }

        public override string ToString()
        {
            return string.Format("Name={0},Gender={1},PhoneNumber={2},PhoneType={3}", Name, Gender, PhoneNumber, PhoneType);
        }
    }
}

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MyBatis-Plus 提供了多种方式来实现多表联合查询,下面列举了两种常见的方式: 1. 使用 MyBatis-Plus 的自定义 SQL 查询:你可以使用 MyBatis-Plus 提供的自定义 SQL 功能来编写多表联合查询的 SQL 语句。首先,创建一个 Mapper 接口,使用 `@Select` 注解来定义你的 SQL 查询语句,然后在 XML 配置文件中编写实际的 SQL 语句。在 SQL 语句中,你可以使用 JOIN 来连接多个表,并在 SELECT 语句中返回所需的字段结果。 例如,假设有两个表 `user` 和 `order`,它们之间通过 `user_id` 字段进行关联,你可以编写如下的 SQL 查询语句: ```java @Mapper public interface UserMapper extends BaseMapper<User> { @Select("SELECT u.*, o.order_number FROM user u JOIN `order` o ON u.user_id = o.user_id") List<UserOrderDTO> selectUserOrder(); } ``` 注意,`UserOrderDTO` 是一个自定义的数据传输对象,用于接收查询结果。 2. 使用 MyBatis-Plus 的 Lambda 查询:MyBatis-Plus 还提供了基于 Lambda 表达式的查询方式。你可以使用 Lambda 表达式来构建多表联合查询的条件,并通过 MyBatis-Plus 提供的方法执行查询。 例如,假设有两个实体类 `User` 和 `Order`,它们之间通过 `user_id` 字段进行关联,你可以编写如下的代码来进行多表联合查询: ```java LambdaQueryWrapper<User> userWrapper = Wrappers.lambdaQuery(); LambdaQueryWrapper<Order> orderWrapper = Wrappers.lambdaQuery(); userWrapper.eq(User::getUserId, Order::getUserId) .select(User::getUserName, Order::getOrderNumber); List<Map<String, Object>> result = userMapper.selectMaps(userWrapper); ``` 上述代码中,我们使用 LambdaQueryWrapper 来构建查询条件,通过 `eq` 方法设置关联字段的条件,然后使用 `select` 方法选择需要返回的字段。最后,使用 `selectMaps` 方法执行查询并返回结果。 这些是实现多表联合查询的两种常见方式,你可以根据具体的需求选择合适的方式来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李公子lm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值