gpt4 book ai didi

c# - 使用 dapper dot net orm 提取一对多关系的最佳方法?

转载 作者:可可西里 更新时间:2023-11-01 08:47:57 25 4
gpt4 key购买 nike

我有两个类“产品”和“卖家”。

public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }

public Seller Seller { get; set; }
public int? SellerId { get; set; }
}
public class Seller
{
public int Id { get; set; }
public string Name { get; set; }
public List<Product> Products { get; set; }
}

我想使用 dapper 提取包含所有产品的卖家列表。

目前我是这样做的:

Dictionary<int, Seller> dic = new Dictionary<int, Seller>();
Conn.Query<Seller, Product, int>
(@"select s.*,p.* from Sellers s Join Products p
on p.SellerId = s.Id",
(s, p) => {
if (dic.ContainsKey(s.Id))
dic[s.Id].Products.Add(p);
else
{
s.Products = new List<Product>();
s.Products.Add(p);
dic.Add(s.Id, s);
}
return s.Id;
});
var sellers = dic.Select(pair => pair.Value);

有没有更好的方法?

最佳答案

我认为您将存储数据的方式与使用数据的方式混合在一起。我建议规范化您的数据库。

//Normalized Database classes
public class Seller
{
public int Id { get; set; } // primary key
public string Name { get; set; }
}

public class Product
{
public int Id { get; set; } // primary key
public int SellerId { get; set; } // foreign key
public string Name { get; set; }
public decimal Price { get; set; }
}

然后就可以直接查询Seller表和product表了。

var Sellers = connection.Query<Seller>("Select * from Seller");
var Products = connection.Query<Product>("Select * from Product");

然后使用 linq“group by”将 Product 放入字典中

var SellerWithProductsDict = 
(from prod
in Products
group prod by prod.SellerId
into groupedProducts
select groupedProducts)
.ToDictionary(gp => gp.SellerId, gp => gp.ToList());

然后你可以通过SellerWithProductsDict循环查看所有的卖家产品,如果你需要卖家名称就从Sellers查询结果中通过索引获取

*****************************************

答案到此结束,但如果您真的需要将产品与卖家混在一起,您可以使用上面相同的数据库结构并执行如下操作:

var qry = @"Select s.Id as SellerId,
s.Name as SellerName,
p.Id as ProductId,
p.Name as ProductName,
p.Price as ProductPrice
From Seller as s, Product as p
Where s.Id = p.id"

var SellerWithProducts = connection.Query(qry)

然后使用 linq“分组依据”函数将其放入字典中。我建议您查看此“Linq group-by multiple fields”帖子,以通过 linq 获得有关该组的帮助

关于c# - 使用 dapper dot net orm 提取一对多关系的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13235988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com