我可以从数据库中获得以下数据:
|----------------|--------------|----------------|----------------|----------------|----------------|
| 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
(即使这里不是您的需要)。
秒,INTO#tmpTable
如果您使用的是sqlserver,则可以使用关键字处理临时表,因此基本上是在内存中创建一个新表来执行查询(这些表是我上面建议的)。
尝试使用您描述的查询来编辑您的问题。
我也发布了存储过程。:)
我认为您应该执行多个存储过程,而不仅仅是一个。如上文所述,您需要感觉每个对象都与其他对象分离。
是的,我将其分为两个存储过程,并且可以正常工作。:)