JOIN 多資料表關聯查詢

Dapper Query<T1,T2,TReturn>() 實作一對一資料表關聯對應

  1. 語法說明:Query<主實體,關聯實體,回傳實體>(sql, 對應委派, 參數)
  2. 對應委派:接收查詢取得的兩個實體,手動設定關聯屬性,最後回傳主實體
  3. SQL 規範:JOIN 查詢務必明確指定欄位,建議設定不同資料表別名,避免同名欄位發生衝突
  4. 模型設計:於主實體內宣告子實體屬性,完成物件巢狀結構(Book 內包含 Customer)

範例

1. 實體類別定義
public class Customers
{
    public int CustomerID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}

public class Book
{
    public int ID { get; set; }
    public string Title { get; set; }
    // 巢狀關聯物件:一本書對應一位客戶(一對一)
    public Customers Customer { get; set; }
}Code language: C# (cs)
2. 查詢邏輯
using System.Data;
using MySql.Data.MySqlClient;
using Dapper;
using System.Configuration;

class Program
{
    static void Main(string[] args)
    {
        var connStr = ConfigurationManager.ConnectionStrings["CustomerConnection"].ConnectionString;
        using (IDbConnection connection = new MySqlConnection(connStr))
        {
            var sql = @"select b.*,c.CustomerID,c.FirstName,c.LastName,c.Email
                        from Customers as c
                        join Book as b
                        on c.CustomerID = b.CID
                        where b.ID = @id;";

            var result = connection.Query<Book, Customers, Book>(
                sql,
                (book, custom) =>
                {
                    // 手動指定巢狀物件
                    book.Customer = custom;
                    return book;
                },
                new { id = 1 }
            );
        }
        Console.ReadKey();
    }
}Code language: C# (cs)

注意:泛型 Query<Book, Customers, Book>

  • 第1個:第一張資料表對應型別 Book
  • 第2個:第二張資料表對應型別 Customers
  • 第3個:最終回傳的資料型別 Book

JOIN 多資料表關聯查詢

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *