根据条件获取数量

问题描述 投票:-2回答:1

我有一个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#问题的最佳方法是什么,谢谢大家

c# asp.net-mvc asp.net-ajax
1个回答
0
投票

创建一个类别,以表明您从某个产品和期间中获得了多少。

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("");
   }
*/
© www.soinside.com 2019 - 2024. All rights reserved.