gpt4 book ai didi

c# - Linq 分组求和问题

转载 作者:太空狗 更新时间:2023-10-29 22:30:25 26 4
gpt4 key购买 nike

我有以下实体:

具有订阅列表的帐户类:

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; }
}

带有变体和附加组件列表的订阅类:

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; }
}

带有变体列表的附加类:

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; }

}

和变体类:

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; }

}

我想做的是用特定代码对所有附加组件进行分组并对数量求和。例如我试过:

var groupAddOnsByCode = acc.Subscriptions.Select(s => s.AddOns.GroupBy(a => a.Variations.Select(v => v.Code).FirstOrDefault())).ToList();

这是一个正确的附加组件组,但我想要一个列表,其中包含按代码和每个代码的总数量列出的每个订阅组的附加组件。

例如,如果一个订阅有 X 个附加组件,并且每个附加组件的代码是 1、2、...、X,我想按代码和此代码的总数量对附加组件进行分组。如果我有以下结构,我希望结果会是这样的:

具有当前结构的伪代码(代码指的是每个附加组件具有的变体类):

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 }
}

我的期望:

Subscription {
AddOn1 { Variation = { Code = 1 }, Quantity = totalAmountOfQuantityForAddOnsWithCode = 1 },
...
AddOnX { Variation = { Code = X }, Quantity = totalAmountOfQuantityForAddOnsWithCode = X },
}

您可以使用这个 dotnetfiddle测试虚拟数据。

很抱歉发了这么长的帖子,如果有任何帮助,我将不胜感激。另请记住,我的 C# 和 Linq 知识有限。

最佳答案

如果我理解正确,以下可能会产生预期的结果

var result = acc.Subscriptions.Select(s => new
{
Subscription = s,
AddOns = s.AddOns.SelectMany(a => a.Variations, (a, v) => new { a, v })
.GroupBy(e => e.v.Code, (key, elements) => new
{
Code = key,
Quantity = elements.Sum(e => e.a.Quantity)
}).ToList()
}).ToList();

关于c# - Linq 分组求和问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34592917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com