如何使用Dapper使用Inner join的操作
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍如何使用Dapper使用Inner join的操作,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、新创建两张表:Users表和Product表Users表定义
千家信息网最后更新 2025年02月02日如何使用Dapper使用Inner join的操作
这篇文章主要介绍如何使用Dapper使用Inner join的操作,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
1、新创建两张表:Users表和Product表
Users表定义如下:
CREATE TABLE [dbo].[Users]( [UserId] [int] IDENTITY(1,1) NOT NULL, [UserName] [varchar](16) NULL, [Email] [varchar](32) NULL, [Address] [varchar](128) NULL,PRIMARY KEY CLUSTERED ( [UserId] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]GO
Product表定义如下:
CREATE TABLE [dbo].[Product]( [ProductId] [int] IDENTITY(1,1) NOT NULL, [ProductName] [varchar](16) NULL, [Price] [decimal](8, 2) NULL, [UserId] [int] NULL,PRIMARY KEY CLUSTERED ( [ProductId] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]GO
查看Users表和Product表会发现两张表通过UserId外键关联起来,然后我们需要在Product实体类上面进行修改,添加一个User的实体属性,修改后的代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DapperApplicationJoin.Model{ public class Product { public int ProductId { get; set; } public string ProductName { get; set; } public User UserOwner { get; set; } public string Price { get; set; } }}
User实体类定义如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DapperApplicationJoin.Model{ public class User { public int UserId { get; set; } public string UserName { get; set; } public string Email { get; set; } public string Address { get; set; } }}
2、Main方法定义如下
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Configuration;using System.Data;using System.Data.SqlClient;using Dapper;using DapperApplicationJoin.Model;namespace DapperApplicationJoin{ class Program { static void Main(string[] args) { string conn = ConfigurationManager.ConnectionStrings["AppConnection"].ConnectionString; using (IDbConnection connection = new SqlConnection(conn)) { string sql = @" select p.ProductName,p.Price,u.UserName,u.UserId,u.Email,u.Address from Product as p join Users as u on p.UserId=u.UserId; "; var result = connection.Query(sql, (product, users) => { product.UserOwner = users; return product; }, splitOn: "UserName"); var query = connection.Query(sql); // 输出 使用动态类型 query.AsList().ForEach(p => { Console.WriteLine("产品名称:" + p.ProductName + ",产品价格:" + p.Price + ",用户姓名:" + p.UserName); }); } Console.ReadKey(); } }}
splitOn参数的含义:代码中的splitOn是UserName,运行时,会从查询结果所有字段列表的最后一个字段开始进行匹配,一直到找到UserName这个字段(大小写忽略无所谓),找到的第一个UserName字段匹配的Product类的UserName属性,那么从UserName到最后一个字段都属于Product,UserName以前的字段都被影射到Users,通过 (T, P) => {return T; },把两个类的实例解析出来。就实现了两个数据的解析,要不然dapper也不知道哪个是Product哪个是Users的属性。
除了可以使用上面的方法以外,还可以使用直接查询SQL语句的方式:
using (IDbConnection connection = new SqlConnection(conn)){ string sql = @" select p.ProductName,p.Price,u.UserName,u.UserId,u.Email,u.Address from Product as p join Users as u on p.UserId=u.UserId; "; var query = connection.Query(sql); // 输出 使用动态类型 query.AsList().ForEach(p => { Console.WriteLine("产品名称:" + p.ProductName + ",产品价格:" + p.Price + ",用户姓名:" + p.UserName); });}
运行结果如下:
以上是"如何使用Dapper使用Inner join的操作"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
字段
产品
实体
属性
两个
代码
价格
内容
动态
名称
姓名
方法
用户
篇文章
类型
结果
查询
输出
运行
无所谓
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
saeast是哪个国家的服务器
缤果互联网科技有限公司
cdn和缓存服务器有什么不同
web 数据库 安卓的项目
php 连接数据库接口开发
商品期货软件开发
数据库实型默认值
常熟理工学院数据库期中考试
破坏植物的数据库
以网络安全为主题的纪录表
数据库系统概论作业
保障服务器如何防护
淮北打车软件开发
服务器管理员可以更换吗
常用的网络安全防护技术包括
手机app交易股票软件开发
网络技术室运行规范
奉贤区智能软件开发供应商家
协议软件开发待遇
神通数据库端口被占用
软件开发三种工具
从化靠谱的网络数据库维护
网络技术助理岗位职责
软件开发后端指哪些
大家称赞的软件开发外包
西安助手软件开发有限公司
淘宝数据库mysql
数据库安全发展成果
客户端服务器架构tcp协议
天津高校党建软件开发电话