26

データベースには、1 (カテゴリ) 対多 (製品) の関係を持つ次の 2 つのテーブルがあります。

Table Product
    Name
    Description
    ProductCategory

Table Category
    Category
    Description

そして、これらのクラス:

public class Product
{
    public string Name { get; set; }
    public string Description { get; set; }
    public Category CategoryName { get; set; }    
}

public class Category
{
    public string CategoryName { get; set; }
    public string Description { get; set; }    
}

リスト内のすべての製品およびカテゴリ オブジェクト データを含むリストを取得したいと考えています。

multipleResults と queryMultiple について読んだことがありますが、2 つを結び付ける方法がわかりません。

私は単一の製品に対してそれを行う方法を知っていますが、個々のカテゴリ オブジェクトを持つすべての製品についても同様です。

4

2 に答える 2

29

このようなテーブルがあるとします。

製品

ID
ProductName
ProductCategoryID

カテゴリー

ID
CategoryName

そしてあなたのクラス

public class Product
{
    public int ID { set; get; }
    public string ProductName { set; get; }
    public int ProductCategoryID  {set;get;}
    public Category Category { set; get; }
}
public class Category
{
    public int ID { set; get; }
    public string CategoryName { set; get; }
}

以下のコードは、関連するカテゴリを持つ製品のリストをロードするために正常に機能するはずです。

var conString="Replace your connection string here";
using (var conn =   new SqlConnection(conString))
{
    conn.Open();
    string qry = "SELECT P.ID,P.ProductName,P.ProductCategoryID,C.ID,
                  C.CategoryName from Product P  INNER JOIN   
                  Category C ON P.ProductCategoryID=C.ID";
    var products = conn.Query<Product, Category, Product>
                     (qry, (prod, cat) => { prod.Category = cat; return prod; });

    foreach (Product product in products)
    {
        //do something with the products now as you like.
    }
    conn.Close(); 
}

ここに画像の説明を入力 注: Dapper は、Id 列の名前が「Id」または「id」であると想定します。主キーが異なる場合、または「Id」以外のポイントで幅の広い行を分割する場合は、オプションの「splitOn」パラメーターを使用します。

于 2013-12-20T22:23:53.307 に答える