美文网首页
lambda多表联合查询

lambda多表联合查询

作者: 十柒年 | 来源:发表于2020-03-17 17:30 被阅读0次

之前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);
        }
    }
}

相关文章

  • lambda多表联合查询

    之前lambda用的不多,但是lambda表达式确实很好用,今天写了个示例,简单的用一下Join。新建三个类,Us...

  • mysql---多表查询

    判断数据表中的分数是否及格: 多表联合查询---左连接 统计个数 嵌套查询: 多表查询:

  • 多表联合查询

    MySQL中基本的多表连接查询教程Mysql脚本之家 var tougao="goldensun";var lmn...

  • 不可置信!SQL 优化终于干掉了“distinct”

    sql 优化之多表联合查询干掉 “distinct” 去重关键字 所以需要把多表的子查询的 sql 结构进行优化。...

  • DQL -- 多表联合查询

    现实生活中,我们需要查询的数据并不独立存在在某一张表中,此时就需要进行多表联合,进行查询操作了。多表联合主分四种:...

  • sqlalchemy多表联合查询

    sqlalchemy多表联合查询(inner outer join 左右连接)详解 按用户名摸糊查询 左外联接(l...

  • 多表联合查询实质

    实质:将前边部分查出的结果再与后续的表联合查询 1.两笔联合查询,不加联合条件;结果分析:结果为两表记录完全组合,...

  • mybatis联合多表查询

    数据库表 pms_user_tea表保存教师用户信息 pms_exp表保存实验室信息查询信息:所有教师下的所有实验...

  • SQLite多表联合查询

    我的微博本文将从SQLite创建表单开始直到多表查询进行介绍,以供新手练习使用,若对SQL有一定了解、只需了解多表...

  • mybatis多表联合查询

    开发环境:postgresql数据库、idea工具、easy code插件、springboot+mybatis数...

网友评论

      本文标题:lambda多表联合查询

      本文链接:https://www.haomeiwen.com/subject/thxxyhtx.html