【问题标题】:Unable to get a distinct list that contains summed values无法获得包含总和值的不同列表
【发布时间】: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#


【解决方案1】:

改成:

    var result = allocationsGrouped
                .Where(product => !string.IsNullOrEmpty(product.PRODUCT_NAME))
                .GroupBy(product => product.PRODUCT_NAME)
                .Select(group => {
                    var product = group.First();
                    return new FirmWideAllocationsViewModel()
                    {
                        Hierarchy = new List<string>() { manStratName, product.PRODUCT_NAME },
                        FirmID = product.FIRM_ID,
                        FirmName = product.Item.FIRM_NAME,
                        ManagerStrategyID = product.MANAGER_STRATEGY_ID,
                        ManagerStrategyName = product.MANAGER_STRATEGY_NAME,
                        ManagerAccountClassID = product.MANAGER_ACCOUNTING_CLASS_ID,
                        ManagerAccountingClassName = product.MANAGER_ACCOUNTING_CLASS_NAME,
                        ManagerFundID = product.MANAGER_FUND_ID,
                        ManagerFundName = product.MANAGER_FUND_NAME,
                        Nav = product.NAV,
                        EvalDate = product.EVAL_DATE.HasValue ? product.EVAL_DATE.Value.ToString("MMM dd, yyyy") : string.Empty,
                        ProductID = product.PRODUCT_ID,
                        ProductName = product.PRODUCT_NAME,
                        UsdEmv = Math.Round((decimal)product.UsdEmv),
                        GroupPercent = product.GroupPercent,
                        WeightWithEq = product.WEIGHT_WITH_EQ,

                        //assign aggregate Sum here
                        EmvSum = group.Sum(x => x.EMV),
                };
            });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    相关资源
    最近更新 更多