欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

輕量級(jí)ORM框架Dapper應(yīng)用之實(shí)現(xiàn)Join操作

 更新時(shí)間:2022年03月07日 08:31:22   作者:.NET開(kāi)發(fā)菜鳥(niǎo)  
本文詳細(xì)講解了使用Dapper實(shí)現(xiàn)Join操作,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在這篇文章中,講解如何使用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]

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表會(huì)發(fā)現(xiàn)兩張表通過(guò)UserId外鍵關(guān)聯(lián)起來(lái),然后我們需要在Product實(shí)體類上面進(jìn)行修改,添加一個(gè)User的實(shí)體屬性,修改后的代碼如下:

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實(shí)體類定義如下:

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);
                // 輸出 使用動(dòng)態(tài)類型
                query.AsList().ForEach(p =>
                {
                    Console.WriteLine("產(chǎn)品名稱:" + p.ProductName + ",產(chǎn)品價(jià)格:" + p.Price + ",用戶姓名:" + p.UserName);
                });
            }

            Console.ReadKey();
        }
    }
}

splitOn參數(shù)的含義:代碼中的splitOn是UserName,運(yùn)行時(shí),會(huì)從查詢結(jié)果所有字段列表的最后一個(gè)字段開(kāi)始進(jìn)行匹配,一直到找到UserName這個(gè)字段(大小寫(xiě)忽略無(wú)所謂),找到的第一個(gè)UserName字段匹配的Product類的UserName屬性,那么從UserName到最后一個(gè)字段都屬于Product,UserName以前的字段都被影射到Users,通過(guò) (T, P) => {return T; },把兩個(gè)類的實(shí)例解析出來(lái)。就實(shí)現(xiàn)了兩個(gè)數(shù)據(jù)的解析,要不然dapper也不知道哪個(gè)是Product哪個(gè)是Users的屬性。

除了可以使用上面的方法以外,還可以使用直接查詢SQL語(yǔ)句的方式:

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);
                // 輸出 使用動(dòng)態(tài)類型
                query.AsList().ForEach(p =>
                {
                    Console.WriteLine("產(chǎn)品名稱:" + p.ProductName + ",產(chǎn)品價(jià)格:" + p.Price + ",用戶姓名:" + p.UserName);
                });
}

運(yùn)行結(jié)果如下:

示例代碼下載地址:點(diǎn)此下載

到此這篇關(guān)于使用Dapper實(shí)現(xiàn)Join操作的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Asp.net,C# 加密解密字符串的使用詳解

    Asp.net,C# 加密解密字符串的使用詳解

    本篇文章對(duì)Asp.net,C# 加密解密字符串的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • asp.net實(shí)現(xiàn)文件下載的代碼

    asp.net實(shí)現(xiàn)文件下載的代碼

    asp.net中也需要實(shí)現(xiàn)文件的下載,因此下面的方法可以參考下除了第四種不推薦以外,其他的都可以,但是個(gè)人感覺(jué)分塊下載的要好一點(diǎn)。沒(méi)有仔細(xì)測(cè)試,所以可能有問(wèn)題。
    2011-02-02
  • net操作access數(shù)據(jù)庫(kù)示例分享

    net操作access數(shù)據(jù)庫(kù)示例分享

    這篇文章主要介紹了net操作access數(shù)據(jù)庫(kù)示例,需要的朋友可以參考下
    2014-03-03
  • 如何在.net6webapi中使用自動(dòng)依賴注入

    如何在.net6webapi中使用自動(dòng)依賴注入

    IOC/DI是一種設(shè)計(jì)模式,用于解耦組件之間的依賴關(guān)系,在傳統(tǒng)的編程模式中,組件之間的依賴關(guān)系是硬編碼在代碼中的,這樣會(huì)導(dǎo)致代碼的耦合度很高,難以維護(hù)和發(fā)展,這篇文章主要介紹了如何在.net6webapi中實(shí)現(xiàn)自動(dòng)依賴注入,需要的朋友可以參考下
    2023-06-06
  • .Net Core使用MongoDB的詳細(xì)教程

    .Net Core使用MongoDB的詳細(xì)教程

    這篇文章主要給大家介紹了關(guān)于.Net Core使用MongoDB的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Sqlite 常用函數(shù)封裝提高Codeeer的效率

    Sqlite 常用函數(shù)封裝提高Codeeer的效率

    以下是頻繁用到的Sqlite函數(shù),內(nèi)容格式相對(duì)固定,封裝一下有助于提高開(kāi)發(fā)效率^_^至少提高Codeeer的效率了
    2012-12-12
  • ASP.net基礎(chǔ)知識(shí)之常見(jiàn)錯(cuò)誤分析

    ASP.net基礎(chǔ)知識(shí)之常見(jiàn)錯(cuò)誤分析

    ASP.net基礎(chǔ)知識(shí)之常見(jiàn)錯(cuò)誤分析...
    2007-07-07
  • ASP.NET DataTable去掉重復(fù)行的2種方法

    ASP.NET DataTable去掉重復(fù)行的2種方法

    這篇文章主要介紹了ASP.NET DataTable去掉重復(fù)行的2種方法,本文直接給出去重代碼,需要的朋友可以參考下
    2015-02-02
  • ASP.NET MVC5使用MiniProfiler監(jiān)控MVC性能

    ASP.NET MVC5使用MiniProfiler監(jiān)控MVC性能

    這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC5使用MiniProfiler監(jiān)控MVC性能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • .NET Core自定義配置文件

    .NET Core自定義配置文件

    這篇文章介紹了.NET Core自定義配置文件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07

最新評(píng)論