1
votes

Création de paires clé-valeur à partir d'un résultat SQL contenant des données en double

Mon problème pour le moment est que j'ai des résultats provenant d'une requête SQL qui renvoie un résultat comme celui-ci:

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

où integer column est l'ID de la colonne. lorsque les données sont renvoyées au code appelant C #, elles sont placées dans un objet suivant cette structure:

PuctName; }

J'ai juste des problèmes avec la façon de créer les termes sans provoquer une quantité infinie de boucles.


0 commentaires

3 Réponses :


2
votes

vous pouvez utiliser un Dictionary de cette façon, vous aurez une paire clé / valeur. la clé est ProductID et la valeur la liste des 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 commentaires

Cette solution ne renvoie pas ProductPricingGetDataItem comme vous l'avez demandé



1
votes

Vous pouvez utiliser Linq et GroupBy:

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

Pour que ce code fonctionne, vous devez ajouter un constructeur à Terms code >:

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();

Fiddle avec exemple de travail: https: // dotnetfiddle. net / EE2BpP


0 commentaires

1
votes

Pour les amateurs de 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();

Dans votre cas précis, le résultat est:

 entrez la description de l'image ici

N'hésitez pas à demander si quelque chose n'est pas clair.


0 commentaires