如何使用Dapper使用Inner join的操作
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍如何使用Dapper使用Inner join的操作,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、新创建两张表:Users表和Product表Users表定义
千家信息网最后更新 2026年11月01日如何使用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安全错误
数据库的锁怎样保障安全
互联网络科技
深圳市人人互联网科技有限公司
互联网科技产业
互联网科技资迅
礼当家互联网科技
世界互联网领先科技成果
百单互联网科技有限公司
碳银互联网科技有限公司
滨湖区互联网智能科技产品供应
中盈科技互联网信息有限公司
创业天下互联网科技有限公司
和信科技工业互联网
科技互联网海报
互联网与数字科技关系
神州科技互联网有限公司
科技互联网行业投资研究
好易买互联网科技
互联网对科技影响
青岛互联网科技园
网互联网络科技
互联网科技财经
奇酷互联网科技
易通互联网络科技有限公司
互联网女皇 腾讯科技
润盈互联网科技
消费医药和互联网科技
深圳市罗太互联网科技有限公司
科技互联网的核心竞争力
互联网金融科技元年
锡山区互联网智能科技产品供应