c# - 在列表 C# 中有列表时从数据集中填充对象
问题描述
我从数据库中获得了这些数据:
|----------------|--------------|----------------|----------------|----------------|----------------|
| entity_name | provider_id | provider_name | product_id | product_name | country_name |
|----------------|--------------|----------------|----------------|----------------|----------------|
| test | 123 | Provider1 | 1 | Product1 | Russia |
|----------------|--------------|----------------|----------------|----------------|----------------|
| test | 123 | Provider1 | 2 | Product2 | Spain |
|----------------|--------------|----------------|----------------|----------------|----------------|
| test | 123 | Provider1 | 3 | Product3 | France |
|----------------|--------------|----------------|----------------|----------------|----------------|
| test | 456 | Provider2 | 3 | Product3 | France |
|----------------|--------------|----------------|----------------|----------------|----------------|
| test | 123 | Provider1 | 4 | Product4 | France |
我必须将它映射到 C# 中的这个模型:
public class EntityModel
{
public string EntityName { get; set; }
public List<ProviderModel> Providers { get; set; }
}
public class ProviderModel
{
public int ProviderID { get; set; }
public string ProviderName { get; set; }
public List<ProductModel> Products { get; set; }
public ProviderModel() { }
}
public class ProductModel
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public string CountryName { get; set; }
public ProductModel() { }
}
所以基本上我必须按供应商分组,对于每个供应商我必须展示产品:
{
"entityName": "string",
"providers": [
{
"ProviderID": 0,
"ProviderName": "string",
"products": [
{
"productId": 0,
"productName": "string",
"countryName": "string"
}
]
}
]
}
返回数据的sp是这样的:
SELECT DISTINCT
e.entity_name
,pro.provider_id
,pro.provider_name
,p.product_id
,p.product_name
,pc.country_name
FROM provider_product_table ppt
INNER JOIN product p ON ppt.product_id = p.product_id
INNER JOIN product_parent pp on pp.product_parent_id=p.product_parent_id
INNER JOIN provider pro ON pro.provider_id = ppt.provider_id
INNER JOIN product_country pc on pc.product_id=p.product_id
INNER JOIN entity e on e.product_parent_id=pp.product_parent_id
WHERE p.product_parent_id = @product_parent_id
ORDER BY p.product_id ASC
我尝试了很多 groupBy 版本,但我被困在映射第二个列表,即产品一个。我怎样才能做到这一点?谢谢 !
解决方案
让我们首先说您的数据库不是结构良好或不是根据您的需要创建的,如果您尝试将数据分成三个表(实体,提供者,产品),实体和提供者之间有关系,那就太好了,并且您的提供者和产品表之间的关系。
但是,也许您正在开发一开始并没有考虑使您的代码甚至您的数据库更具可扩展性的新功能。在这种情况下,我需要查看您已经创建的组查询请求( groupby )。
同时我可以想象你的需要,所以你有几个解决方案。
第一个是你想要做什么,创建几个填充你的类的查询,我也可以用冗余来想象,因为有一些 id 由于你的数据库结构而不幸重复,在这种情况下你需要使用DISTINCT
或 INTERSECT
(即使它不是你需要的)。
如果您使用的是 sqlserver,您可以使用关键字来处理临时表INTO#tmpTable
,所以基本上是在内存中创建一个新表来执行您的查询(这些表是我上面建议的)。
尝试使用您描述的那些查询来编辑您的问题。
推荐阅读
- sql - 在另一个表中进行更改时自动插入 SQL 表
- python - 使用请求进行 Web 抓取 - Python
- bash - Bash 字符串包含 0 以外的数字
- python - Python bs4 webscraping 只返回空值
- git - Github 问题 - 当我在 github 上推送我的项目时,它显示 myname 和 myname 提交,我的名字出现了 2 次,为什么会这样?
- audio-streaming - 从 axWindowsMediaPlayer 控件中检索广播歌曲标题
- javascript - 如何确定光标是否出现在 contenteditable div 中的某些字符之后
- python - 反转 2D --> 2D 非线性函数
- bash - 使用 fdisk 命令的 Bash 脚本磁盘分区
- elasticsearch - 在每个索引的小数据集上进行多索引搜索的 ElasticSearch 性能优化