从具有重复数据的 SQL 结果创建键值对

Creating key-value pairs from SQL result that have duplicate data

我目前的问题是 SQL 查询返回的结果 returns 是这样的结果:

125 Month   10.00   Wholesale
125 Year    20.00   Wholesale
126 Month   20.00   Wholesale
126 Year    30.00   Wholesale
127 Month   40.00   Wholesale
127 Year    50.00   Wholesale

其中整数列是列的 ID。 当数据返回到 C# 调用代码时,它被放入遵循此结构的对象中:

产品名称; }

我只是对如何在不引起无限循环的情况下创建术语有疑问。

您可以使用 Dictionary 这样您将拥有一个键值对。键是 ProductID,值是 Terms.

的列表
var dictionary = new Dictionary<int, List<Terms>>();
foreach (ProductTermAndPricingDataItem item in productInformationItems)
{
            if(dictionary.ContainsKey(item.ProductID))
            {
                dictionary[item.ProductID].Add(new Terms { Term = item.BillingPeriodName, Price = item.PriceAmount});
            }
            else
            {
                dictionary.Add(item.ProductID, new List<Terms>() { new Terms() {Term = item.BillingPeriodName, Price = item.PriceAmount             } });
            }  
 }

您可以使用 Linq 和 GroupBy:

List<ProductPricingGetDataItem> grouped = productInformationItems.GroupBy(
                                        p => p.ProductID,
                                        (key, g) => new ProductPricingGetDataItem() { ProductID = key, Terms = g.Select(x => new Terms(x.BillingPeriodName, x.PriceAmount)).ToList() }).ToList();

为了使该代码正常工作,您需要向 Terms 添加一个构造函数:

public Terms(string term, decimal price)
{
    Term = term;
    Price = price;
}

Fiddle 工作示例:https://dotnetfiddle.net/EE2BpP

对于 LINQ 爱好者:

//Your initial data list
var productInformationItems = new List<ProductTermAndPricingDataItem>();
var productPricingGetDataItems = productInformationItems.ToLookup(item => item.ProductID)
                                                        .Select(grouping => new ProductPricingGetDataItem
                                                        {
                                                            ProductID = grouping.Key,
                                                            Terms = grouping.Select(item => new Terms
                                                            {
                                                                Price = item.PriceAmount,
                                                                Term = item.BillingPeriodName
                                                            }).ToList()
                                                        }).ToList();

在您的确切情况下,结果是:

有什么不明白的地方尽管问。