我有一个SQL表名称产品:
| Product Id | Number | Product Period |
|:----------:|:------:|:--------------:|
| 1 | 10 | 1 |
| 1 | 15 | 2 |
| 1 | 20 | 3 |
| 1 | 10 | 4 |
我需要获取产品编号,并且必须满足以下条件:-从第一期开始-如果第一个期间的数字不够用->从第二个期间取值,然后继续例如:-我需要服用5种产品->期间1:5-我需要服用35种产品->时间段1:10,时间段2:20,时间段3:5
P / s:解决c#问题的最佳方法是什么,谢谢大家
创建一个类别,以表明您从某个产品和期间中获得了多少。
public class PeriodDeductionModel{
public int ProductPeriod {get;set;}
public int Deduction { get;set; }
}
然后创建一个循环,该循环将从每条记录中扣除,直到您需要的数量达到0。
int productId = 1; // please provide your product id
int quantityYouNeed = 12; // for example you need 12 products.
var products = context.Products.OrderBy(p=>p.ProductPeriod).ToList(); // order by ascending so we start from the first Period
List<PeriodDeductionModel> periodDeductions = new List<PeriodDeductionModel>();
foreach(var product in products){
if(product.Number > quantityYouNeed)
{
// if this period has enough product numbers, add deduction and stop loop
product.Number = product.Number - quantityYouNeed; // update product
periodDeductions.Add(new PeriodDeduction(){ ProductPeriod=product.Period, Deduction=quantityYouNeed });
break; // stop loop
}
else
{
// if this period doesn't have enough product numbers, add deduction then continue loop
quantityYouNeed = quantityYouNeed - product.Number;
periodDeductions.Add(new PeriodDeduction(){ ProductPeriod=product.Period, Deduction=product.Number });
product.Number = 0; // update product
}
}
context.SaveChanges(); // save updated product numbers
// periodDeductions will contain how many we deducted from each period, you can loop and see if you want
/*
foreach(var periodDeduction in periodDeductions){
Console.WriteLine("Period: "+periodDeduction.ProductPeriod.ToString());
Console.WriteLine("Deduction: "+periodDeduction.Deduction.ToString());
Console.WriteLine("");
}
*/