Мне нужна помощь с проблемой логики, и я надеюсь, что кто-нибудь сможет помочь мне с эффективным способом решения моей проблемы с использованием C # и LINQ .
У меня естьследующий список услуг с различными условиями:
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
Моя цель состоит в том, чтобы повторно распределить поле RecurringMonthlyCharge
равномерно (с учетом «срока») после уменьшения общей комиссии на $ x.
Например, если я дисконтирую общую сумму на 50,00 долларов США, я хотел бы разделить эти 50 долларов на 3 строки и принять во внимание термин.
Использование «Сервис 1» в качествеНапример, это будет выглядеть так:
10 - (50/12) = $5.83/mo
Мой вопрос заключается в том, как сделать это пропорционально по всем строкам, учитывая при этом различную длину термина.Возможно, с помощью общего множителя или метода взвешивания?
Несколько баллов:
- Комиссия за срок (т. Е. За услугу 1 выплачивается комиссия в размере 100,00 долл. США, основанная на12-месячное соглашение)
- Общая примененная скидка должна быть вычтена равномерно из ежемесячных периодических платежей, принимая во внимание срок, итоговую сумму скидки (50 долларов в моем примере).
Попытка № 1:
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;
}