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