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.
3 Réponses :
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 } });
}
}
Cette solution ne renvoie pas ProductPricingGetDataItem comme vous l'avez demandé
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
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:
N'hésitez pas à demander si quelque chose n'est pas clair.