Создание пар ключ-значение из результата SQL с дублирующимися данными - PullRequest
1 голос
/ 01 октября 2019

Моя проблема на данный момент заключается в том, что у меня есть результаты, возвращаемые из запроса SQL, который возвращает результат, подобный следующему:

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

где столбец целых чисел - это идентификатор столбца. когда данные возвращаются в вызывающий код C #, они помещаются в объект, следующий этой структуре:

PuctName;}

У меня просто проблемы с тем, как создавать условия, не вызывая бесконечное количество циклов.

Ответы [ 3 ]

2 голосов
/ 01 октября 2019

Вы можете использовать Словарь , таким образом, у вас будет пара ключ-значение. ключ 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             } });
            }  
 }
1 голос
/ 01 октября 2019

Для любителей 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();

В вашем конкретном случае результат:

enter image description here

Не стесняйтесь спрашивать, есличто-то не понятно.

1 голос
/ 01 октября 2019

Вы можете использовать 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

...