gpt4 book ai didi

c# - 如何编写此 LINQ 以应用业务逻辑?

转载 作者:行者123 更新时间:2023-11-30 14:57:17 25 4
gpt4 key购买 nike

我正在尝试应用一些业务逻辑。
我关于在以下对象模型上使用 LINQ 以应用业务逻辑的问题。我相应地填充了以下对象:

public class Waiver
{
public string Id { get; set; }
public int Type { get; set; }
public decimal Amount { get; set; }
}

要应用的业务逻辑:

1.) 应用行项目豁免
如果 LineItem Waiver [Type] 是 1111 从单价中扣除 LineItem Waiver 金额
如果 LineItem Waiver [Type] 是 2222,则扣除 LineItem WaiverAmount 作为单价的百分比
如果 LineItem Waiver [Type] 为 3333,则扣除 LineItem Waiver 金额(Line Price = Qty * Unit Price)
如果 LineItem Waiver [Type] 为 4444,则扣除 LineItem Waiver Amount 作为离线价格的百分比

2.) 申请订单豁免
如果 Order Waiver [Type] 是 4444,在应用 LineItem Waivers 后从总订单价格中扣除 Order Waiver 金额
如果 Order Waiver [Type] 是 8888,则在应用 LineItem Waivers 后扣除 Order Waiver 金额作为订单价格的百分比

实现此目标的最佳方法是什么?

GetWaivedPrice(decimal unitPrice, int qty, IEnumerable<Waiver> waiver)

能否将 GetWaivedPrice 编写为单个 LINQ 方法,并为所有折扣类型提供适当的映射?

这就是我想要实现的目标,最好是编写良好的 LINQ 方法:

private decimal GetWaivedPrice(decimal unitPrice, int qty, 
IEnumerable<Waiver> waiver)
{
//Pseudo code shown for clarifying intent
decimal waivedLineItemAmount = 0m;

if waiver.Select(d => d.Type == 1111)
//then apply the business logic on the unit price accordingly
if waiver.Select(d => d.Type == 2222)
//then apply the business logic on the unit price accordingly
if waiver.Select(d => d.Type == 3333)
//then apply the business logic on the unit price accordingly

return waivedLineItemAmount;

}

最佳答案

我在这里看不到 LINQ 的情况。只需依次应用每个 Waver

    private decimal GetWaivedPrice(decimal unitPrice, int qty, 
IEnumerable<Waiver> waiver)
{
//Pseudo code shown for clarifying intent
decimal waivedLineItemAmount = 0m;

//apply all waivers
foreach (var w in waiver) {
switch (w.Type) {
case 1111:
waivedLineItemAmout += someComputation();
break;
case 2222:
waivedLineItemAmout += someComputation();
break;
case 3333:
waivedLineItemAmout += someComputation();
break;
}
}

return waivedLineItemAmount;
}

如果您坚持使用 LINQ 和纯函数式风格,那么您可以使用 Enumerable.Aggregate 来表达它,但在这里使用简单的循环似乎就可以了。

关于c# - 如何编写此 LINQ 以应用业务逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21050080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com