繁体   English   中英

如何根据唯一ID合并和总结两个列表的结果

[英]how to combine and sum up the result from two lists based on unique id

我有一种方法可以检索两个列表。 而且我正在显示基于union的列表。

但我想根据唯一的ID(即FC_Id

public List<ContractFundingCategory> CalculateContractFundingCategoryAmountbyPurchaseOrder(int poId, string serviceType)
{
    List<ContractFundingCategory> lstContractFundingCategory = new List<ContractFundingCategory>();

    var lstContractFundingCategoryEbs = 
        (
            from payment in context.PaymentDetails
            join reimEbs in context.Reimbursement_EBSUtilization on payment.REU_Id equals reimEbs.Id into ebs_join
            from reimEbs in ebs_join.DefaultIfEmpty()
            join purc in context.PurchaseOrders on payment.PO_Id equals purc.Id
            join serviceDetail in context.fServiceDetails on reimEbs.SD_Id equals serviceDetail.Id
            join fundingCategory in context.fFundingCategories on serviceDetail.FC_Id equals fundingCategory.Id into fundingCategory_Join
            from fundingCategory in fundingCategory_Join.DefaultIfEmpty()
            where payment.PO_Id == poId && (serviceDetail.ServiceType == serviceType)
            group new { fundingCategory, payment, serviceDetail } by new
            {
                fundingCategory.Id,
                serviceDetail.ServiceType,
            } into grp
            select new
            {
                FC_Id = grp.Key.Id,
                serviceType = grp.Key.ServiceType,
                BudgetAmount = grp.Sum(p => p.payment.PaymentAmount),
            }
        )
        .AsEnumerable().Select(x => new ContractFundingCategory
        {
            FC_Id = x.FC_Id,
            BudgetAmount = x.BudgetAmount,
            ServiceType = x.serviceType.ToString()
        }).ToList();


    var lstContractFundingCategoryCds = 
        (
            from payment in context.PaymentDetails
            join reimCds in context.Reimbursement_CDSUtilization on payment.RCU_Id equals reimCds.Id into cds_join
            from reimCds in cds_join.DefaultIfEmpty()
            join cdsutil in context.CDSUtilizations on reimCds.CDSU_Id equals cdsutil.Id
            join purc in context.PurchaseOrders on payment.PO_Id equals purc.Id
            join serviceDetail in context.fServiceDetails on cdsutil.ServiceDetail_Id equals serviceDetail.Id
            join fundingCategory in context.fFundingCategories on serviceDetail.FC_Id equals fundingCategory.Id into fundingCategory_Join
            from fundingCategory in fundingCategory_Join.DefaultIfEmpty()
            where payment.PO_Id == poId && (serviceDetail.ServiceType == serviceType)
            group new { fundingCategory, payment, serviceDetail } by new
            {
                fundingCategory.Id,
                serviceDetail.ServiceType,
            } into grp
            select new
            {
                FC_Id = grp.Key.Id,
                serviceType = grp.Key.ServiceType,
                BudgetAmount = grp.Sum(p => p.payment.PaymentAmount),
            }
        )
        .AsEnumerable().Select(x => new ContractFundingCategory
        {
            FC_Id = x.FC_Id,
            BudgetAmount = x.BudgetAmount,
            ServiceType = x.serviceType.ToString()
        }).ToList();

    //lstContractFundingCategory.AddRange(lstContractFundingCategoryEbs);
    //lstContractFundingCategory.AddRange(lstContractFundingCategoryCds);

    //List<ContractFundingCategory> a = new List<ContractFundingCategory>();

    lstContractFundingCategory =  lstContractFundingCategoryEbs
        .Union(lstContractFundingCategoryCds)
        .ToList();

    return lstContractFundingCategory;

}

有人可以帮我写循环语句吗

lstContractFundingCategory.Aggregate(new Dictionary<int,int>(), (acc,elem) => { acc.ContainsKey(elem.FC_Id) ? acc[elem.FC_Id] += elem.BudgetAmount : acc.Add(elem.FC_Id, elem.BudgetAmount); return acc; });

汇总是一种折合模拟,它会迭代您的价值并将其应用于累加器。 在这种情况下,我们将提供一个新的字典作为累加器。 匿名函数正在检查字典是否具有您的密钥; 如果有,则将预算值添加到当前值,如果没有将键与初始预算值添加。 它将返回一个Dictionary,其键是您唯一的FC_Id,其值是这些预算的总和。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM