使用C#和LINQ重新分配值
我正在寻找一些关于逻辑问题的帮助,希望有人能够帮助我使用C#和LINQ有效地解决我的问题 我有以下不同条款的服务清单:使用C#和LINQ重新分配值,c#,linq,math,C#,Linq,Math,我正在寻找一些关于逻辑问题的帮助,希望有人能够帮助我使用C#和LINQ有效地解决我的问题 我有以下不同条款的服务清单: Item | RecurringMonthlyCharge | Term | Commission ------------------------------------------------------- Service 1 | $10.00 | 12 | $100.00 Service 2 | $12.00
Item | RecurringMonthlyCharge | Term | Commission
-------------------------------------------------------
Service 1 | $10.00 | 12 | $100.00
Service 2 | $12.00 | 18 | $200.00
Service 3 | $14.00 | 12 | $300.00
我的目标是在将佣金总额减少x美元后,平均重新分配每月重复收费
字段(考虑“期限”)
例如,如果我将佣金总额贴现50.00美元,我希望将50美元分成3行,并考虑期限
以“服务1”为例,其结果如下:
10 - (50/12) = $5.83/mo
我的问题是如何在考虑到不同的期限长度的情况下,在所有行上按比例执行此操作。也许通过公因子或加权技术
几点:
private static decimal GetRecurringCostEquiv(List<QuotationItemViewModel> items)
{
var discVal = GetDiscounts(items, 2);
decimal? result = 0.00M;
decimal factor = 1.00M / items.Where(x => x.ProductTypeId == 2).Sum(i => i.RecurringTerm ?? 0);
result = items.Select(i => i.RecurringCostCore - i.RecurringTerm * factor * discVal).Sum();
return result ?? 0.00M;
}
- 佣金为期限(即服务1的佣金为100.00美元 根据12个月的协议支付)
- 应用的总折扣必须为 从每月经常性费用中平均扣除,包括 计算期限,总计最终折扣金额(我的账户中为50美元) 示例)
private static decimal GetRecurringCostEquiv(List<QuotationItemViewModel> items)
{
var discVal = GetDiscounts(items, 2);
decimal? result = 0.00M;
decimal factor = 1.00M / items.Where(x => x.ProductTypeId == 2).Sum(i => i.RecurringTerm ?? 0);
result = items.Select(i => i.RecurringCostCore - i.RecurringTerm * factor * discVal).Sum();
return result ?? 0.00M;
}
private静态十进制GetRecurringCostEquiv(列表项)
{
var discVal=获得折扣(项目2);
十进制?结果=0.00M;
十进制系数=1.00M/项。其中(x=>x.ProductTypeId==2)。总和(i=>i.RecurringTerm??0);
结果=项目。选择(i=>i.RecurringCostCore-i.RecurringTerm*因子*discVal).Sum();
返回结果??0.00M;
}
简单伪代码:
RecurringMonthlyCharge[i]=$50*RecurringMonthlyCharge[i]/SUM(RecurringMonthlyCharge)
具体来说,你最终得到的是13.88美元、16.66美元、19.44美元。这就是你所想的吗?基于你的例子,你会这么想吗
var listOfResults =
Items.Select(i => i.RecurringMonthlyCharge - (Discount / i.Term))
现在,如果你实际上想按比例减少,最简单的方法是使用所有项的总和作为因子的基础:
double factor = 1.0 / Items.Sum(i => i.Term);
var listOfResults =
Items.Select(i => i.RecurringMonthlyCharge - i.Term * factor * Discount))
如果您的数据集很大,可能需要使用其他方法,但对于合理的大小,这应该可以很好地工作如果我正确地得到了要求,接下来应该可以工作:
const双折扣=50;
var items=新列表()
{
新服务{Item=“Service1”,每月重复收费=10,期限=12,佣金=100},
新服务{Item=“Service2”,每月重复收费=12,期限=18,佣金=200},
新服务{Item=“Service3”,每月重复收费=14,期限=12,佣金=300}
};
//计算总期限
double totalTerms=items.Sum(x=>x.Term);
var searchedItems=items.Select(service=>service.RecurringMonthlyCharge-(折扣/总条款)*service.Term);
在这种情况下,这不是应该是10-(50*(12/(12+18+12))?您能详细介绍一下“佣金总额”和各行的拆分吗?在你的例子中,似乎所有50美元的佣金减免都适用于服务1?@AakashM-在我的例子中,它适用于一条线。我的要求是在总折扣的基础上减少每条线路的每月重复收费。为了清晰起见,我增加了几点。感谢您的回复,但这将在线路之间平均分配。我想考虑一下这个术语(因此#2是9.22美元(12-(50/18))。此外,如果佣金减少,每月定期费用也会减少。感谢您更新答案。我如何在您的第二个示例中应用折扣?它肯定更接近我想要的位置。嗯,选择的结果是您的新的每月定期费用,对吗?所以,用新的值替换旧的值。这可以一次性完成ch-loop。谢谢你对我耐心,但我还没有完全理解。我唯一的输入是“总折扣”,在你上面给出的第二个例子中似乎没有使用。再次感谢你的评论。我用我的方法更新了我的答案,但它计算的数字太离谱了。有什么想法吗?我很困惑,你做了一个求和,所有项目只有一个结果。我想这是每个项目的一个变化?如果不是这样,我恐怕我仍然会不要得到你的要求。。。