輕量級ORM框架Dapper應(yīng)用之實現(xiàn)Join操作
在這篇文章中,講解如何使用Dapper使用Inner join的操作
1、新創(chuàng)建兩張表: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]
GOProduct表定義如下:
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表會發(fā)現(xiàn)兩張表通過UserId外鍵關(guān)聯(lián)起來,然后我們需要在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<Product, User, Product>(sql,
(product, users) =>
{
product.UserOwner = users; return product;
}, splitOn: "UserName");
var query = connection.Query(sql);
// 輸出 使用動態(tài)類型
query.AsList().ForEach(p =>
{
Console.WriteLine("產(chǎn)品名稱:" + p.ProductName + ",產(chǎn)品價格:" + p.Price + ",用戶姓名:" + p.UserName);
});
}
Console.ReadKey();
}
}
}splitOn參數(shù)的含義:代碼中的splitOn是UserName,運行時,會從查詢結(jié)果所有字段列表的最后一個字段開始進行匹配,一直到找到UserName這個字段(大小寫忽略無所謂),找到的第一個UserName字段匹配的Product類的UserName屬性,那么從UserName到最后一個字段都屬于Product,UserName以前的字段都被影射到Users,通過 (T, P) => {return T; },把兩個類的實例解析出來。就實現(xiàn)了兩個數(shù)據(jù)的解析,要不然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);
// 輸出 使用動態(tài)類型
query.AsList().ForEach(p =>
{
Console.WriteLine("產(chǎn)品名稱:" + p.ProductName + ",產(chǎn)品價格:" + p.Price + ",用戶姓名:" + p.UserName);
});
}運行結(jié)果如下:

示例代碼下載地址:點此下載
到此這篇關(guān)于使用Dapper實現(xiàn)Join操作的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解ASP.NET MVC 利用Razor引擎生成靜態(tài)頁
本篇文章主要介紹了ASP.NET MVC 利用Razor引擎生成靜態(tài)頁,詳細的介紹了原理和步驟,具有一定的參考價值,有興趣的可以了解一下。2017-03-03
.Net Core讀取Json配置文件的實現(xiàn)示例
這篇文章主要介紹了.Net Core讀取Json配置文件的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
.NET必知的EventCounters性能指標監(jiān)視器詳解
這篇文章主要介紹了.NET必知的EventCounters性能指標監(jiān)視器,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
asp.net Excel轉(zhuǎn)換為SQL Server的方法
辦公軟件Excel是一種常用的電子表格軟件,在編程項目中有需要將Excel轉(zhuǎn)換為SQL Server數(shù)據(jù)庫的需求,本文對此進行一些介紹并給出設(shè)計代碼。2009-06-06
Asp.net導(dǎo)出Excel/Csv文本格式數(shù)據(jù)的方法
這篇文章主要介紹了Asp.net導(dǎo)出Excel/Csv文本格式數(shù)據(jù)的方法,比較實用,需要的朋友可以參考下2014-09-09
ASP.NET Core3.1 Ocelot負載均衡的實現(xiàn)
這篇文章主要介紹了ASP.NET Core3.1 Ocelot負載均衡的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
DropDownList根據(jù)下拉項的Text文本序號排序
在某些時候表中沒有可以排序的字段同時呢也不想修改表結(jié)構(gòu),但它的項文本有序號這時就可以用這方法排序,感興趣的你可以參考下,或許本文知識點對你有所幫助2013-03-03

