Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何提取复杂对象中的所有父/子数据_C#_Dapper_Multiple Resultsets - Fatal编程技术网

C# 如何提取复杂对象中的所有父/子数据

C# 如何提取复杂对象中的所有父/子数据,c#,dapper,multiple-resultsets,C#,Dapper,Multiple Resultsets,我在数据库中有两个具有一(类别)对多(产品)关系的表: Table Product Name Description ProductCategory Table Category Category Description 这些课程: public class Product { public string Name { get; set; } public string Description { get; set; } pub

我在数据库中有两个具有一(类别)对多(产品)关系的表:

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的文章,但不知道如何将两者联系起来


我知道如何对单个产品执行此操作,但对所有具有各自类别对象的产品又如何呢。

这应该满足您的要求:

var res = db.Query<Product, Category, Product>(
  @"select p.[Name], p.[Description], c.Category, c.Category as [CategoryName], c.Description
  from Product p
  inner join Category c on c.Category = p.ProductCategory",
  (prd, cat) => {
      prd.CategoryName = cat;
      return prd;
  },
  splitOn: "Category"
  ).AsQueryable();
然后查询可以变得更清晰:

var res = db.Query<Product, Category, Product>(
    @"select p.[Name], p.[Description], c.Category as [CategoryName], c.Description
      from Product p
      inner join Category c on c.Category = p.ProductCategory",
      (prd, cat) => {
          prd.Category = cat;
          return prd;
      },
      splitOn: "CategoryName"
      ).AsQueryable();
var res=db.Query(
@“选择p.[名称],p.[说明],c.类别作为[CategoryName],c.说明。”
来自产品p
在c.Category=p.ProductCategory上的内部联接类别c“,
(珠江三角洲,cat)=>{
珠江三角洲类别=cat;
回归珠三角;
},
splitOn:“类别名称”
).AsQueryable();

假设您有这样的表

产品

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(); 
}
var conString=“在此处替换您的连接字符串”;
使用(var conn=new SqlConnection(consting))
{
conn.Open();
string qry=“选择P.ID、P.ProductName、P.ProductCategoryID、C.ID、,
来自产品P内部联接的C.CategoryName
P.ProductCategoryID=C.ID”上的C类;
var产品=连接查询
(qry,(prod,cat)=>{prod.Category=cat;return prod;});
foreach(产品中的产品)
{
//现在可以随心所欲地使用这些产品。
}
康涅狄格州关闭();
}
注意:Dapper假设您的Id列命名为“Id”或“Id”,如果主键不同或您希望在“Id”以外的点拆分宽行,请使用可选的“splitOn”参数

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(); 
}