Ho le seguenti entità:Linq GROUP BY e somma i problemi
Una classe account con un elenco di sottoscrizioni:
public class Account
{
/// <summary>
/// Account ID
/// </summary>
public string ID { get; set; }
/// <summary>
/// A List with all subscriptions
/// </summary>
public IEnumerable<Subscription> Subscriptions { get; set; }
}
la classe di sottoscrizione con una lista di varianti e add ons:
public class Subscription
{
/// <summary>
/// Subscription ID
/// </summary>
public string ID { get; set; }
/// <summary>
/// Quantity of the subscription.
/// </summary>
public int Quantity { get; set; }
/// <summary>
/// A list with all subscription add ons
/// </summary>
public IEnumerable<AddOn> AddOns { get; set; }
/// <summary>
/// A List with all subscription variations
/// </summary>
public IEnumerable<Variation> Variations { get; set; }
}
l'add on di classe con una lista di varianti:
public class AddOn
{
/// <summary>
/// Gets or Sets add on id
/// </summary>
public string ID { get; set; }
/// <summary>
/// Quantity of the add on.
/// </summary>
public int Quantity { get; set; }
/// <summary>
/// A List with all add on variations
/// </summary>
public IEnumerable<Variation> Variations { get; set; }
}
E la classe di variazione:
public class Variation
{
/// <summary>
/// Variation ID
/// </summary>
public string ID { get; set; }
/// <summary>
/// offerUri
/// </summary>
public string Code { get; set; }
/// <summary>
/// Variation Value
/// </summary>
public string Value { get; set; }
/// <summary>
/// Variation Name
/// </summary>
public string Name { get; set; }
}
Quello che sto cercando di fare è quello di raggruppare tutti add ons con il codice specifico e sommare la quantità. Per esempio ho provato:
var groupAddOnsByCode = acc.Subscriptions.Select(s => s.AddOns.GroupBy(a => a.Variations.Select(v => v.Code).FirstOrDefault())).ToList();
Questo uno gruppi corretti add ons, ma voglio una lista con con add ons per gruppo sottoscrizione da parte di codice e la quantità totale per il codice.
Ad esempio se un abbonamento ha il numero X di componenti aggiuntivi e il codice di ogni componente aggiuntivo è 1, 2, ..., X, desidero raggruppare per add-on per codice e quantità totale con questo codice. Mi aspetto che il risultato sarà qualcosa di simile se ho la seguente struttura:
Una pseudo-codice con struttura attuale (codice si riferisce a Variazione classe che ogni add on ha):
Subscription {
//a list with X number of add ons
AddOn1 = { Variation = { Code = 1 }, Quantity = 2 },
AddOn2 = { Variation = { Code = 2 }, Quantity = 3 },
...
AddOnX = { Variation = { Code = X }, Quantity = 4 }
}
Quello che mi aspetto:
Subscription {
AddOn1 { Variation = { Code = 1 }, Quantity = totalAmountOfQuantityForAddOnsWithCode = 1 },
...
AddOnX { Variation = { Code = X }, Quantity = totalAmountOfQuantityForAddOnsWithCode = X },
}
È possibile utilizzare questo dotnetfiddle per testare dati fittizi.
Siamo spiacenti per il post lungo e apprezzerò qualsiasi aiuto. Ricorda anche che il mio C# e la conoscenza di Linq sono limitati.
Giusto per chiarire, si vuole raccogliere i AddOns da ogni abbonamento in un unico set e poi gruppo che master impostata da Variation.Code? – ryanyuyu
@ryanyuyu Sì, e per essere più specifici. Diciamo che ho un abbonamento con 20 add on con i codici 1, 2, 3. Voglio un abbonamento con 3 add on e la quantità totale di ciascuno con lo stesso codice. –
Ok solo per essere sicuri, non vuoi combinare le cose tra diversi abbonamenti giusto? Quindi se hai 2 abbonamenti ciascuno con 10 add-on, vuoi due gruppi di add-on completamente separati e non un gruppo dal 20? – ryanyuyu