【发布时间】:2019-03-29 05:37:54
【问题描述】:
我之前已发布过此内容,但我试图实现的目标似乎已经丢失,因此重新发布它以更好地解释自己。
我有一个包含具有不同值的重复产品名称的集合。我的目标是获得一个列表,将这些产品名称相加,以便列表包含这些重复项的单个记录。
For e.g
If the list contains
Product A 100
Product A 200
The result object should contain
Product A 300
正如您在下面的代码中所见,我将 IEnumerable allocationsGrouped 传递给该方法。我按产品名称分组并对 Emv 字段求和,然后循环它,以便创建一个 List 类型的新列表并将其传递给调用方方法。我在这里看到的问题在于以下代码行 Items = group.项目现在包含没有总和的原始列表。因此,内部 foreach 循环运行的次数不止一个,因为存在重复,这违背了我的目的。我最终需要返回具有非重复值的结果对象,这些值是根据上述标准求和的。你能告诉我哪里出错了。
private static List<FirmWideAllocationsViewModel> CreateHierarchy(string manStratName, IEnumerable<FIRMWIDE_MANAGER_ALLOCATION> allocationsGrouped, List<FirmWideAllocationsViewModel> result)
{
var a = allocationsGrouped
.Where(product => !string.IsNullOrEmpty(product.PRODUCT_NAME))
.GroupBy(product => product.PRODUCT_NAME)
.Select(group => new
{
ProductName = group.Key, // this is the value you grouped on - the ProductName
EmvSum = group.Sum(x => x.EMV),
Items = group
});
var b = a;
var item = new FirmWideAllocationsViewModel();
item.Hierarchy = new List<string>();
item.Hierarchy.Add(manStratName);
result.Add(item);
foreach (var ac in b)
{
var productName = ac.ProductName;
var emvSum = ac.EmvSum;
foreach (var elem in ac.Items)
{
var item2 = new FirmWideAllocationsViewModel();
item2.Hierarchy = new List<string>();
item2.Hierarchy.Add(manStratName);
item2.Hierarchy.Add(elem.PRODUCT_NAME);
item2.FirmID = elem.FIRM_ID;
item2.FirmName = elem.FIRM_NAME;
item2.ManagerStrategyID = elem.MANAGER_STRATEGY_ID;
item2.ManagerStrategyName = elem.MANAGER_STRATEGY_NAME;
item2.ManagerAccountClassID = elem.MANAGER_ACCOUNTING_CLASS_ID;
item2.ManagerAccountingClassName = elem.MANAGER_ACCOUNTING_CLASS_NAME;
item2.ManagerFundID = elem.MANAGER_FUND_ID;
item2.ManagerFundName = elem.MANAGER_FUND_NAME;
item2.Nav = elem.NAV;
item2.EvalDate = elem.EVAL_DATE.HasValue ? elem.EVAL_DATE.Value.ToString("MMM dd, yyyy") : string.Empty;
item2.ProductID = elem.PRODUCT_ID;
item2.ProductName = elem.PRODUCT_NAME;
item2.UsdEmv = Math.Round((decimal)elem.UsdEmv);
item2.GroupPercent = elem.GroupPercent;
item2.WeightWithEq = elem.WEIGHT_WITH_EQ;
result.Add(item2);
}
}
return result;
}
【问题讨论】:
-
您是指 FirmWideAllocationsView 模型。它包含产品名称字段。这是我发送给这个方法并返回给调用者的那个列表。我正在使用分组和求和来实现我的目标
标签: c#