如何使用 c# 拆分值并递增部件

本文关键字:增部 何使用 拆分 | 更新日期: 2023-09-27 18:36:17

我有以下代码:

int value = 0;
int day = 0;           
int record = db.Orders.Where(x => x.Order_Date.Value.Year == DateTime.Now.Year
    && x.Order_Date.Value.Month == DateTime.Now.Month
    && x.Order_Date.Value.Day == DateTime.Now.Day).Count();
if (record > 0)
{
    value = int.Parse(db.Orders.OrderByDescending(x => x.Order_Id).Select(y => y.Order_Id).First().ToString());
    value += 1;
}
else
{
    day = Convert.ToInt32(DateTime.Now.ToString("dd") + DateTime.Now.ToString("MM") + DateTime.Now.ToString("yy"));
    value = day + 0001;
}

我想将订单 ID 保存在ddmmyysomevalue中,例如0501150001如果是一阶。

我确实有上面的代码,但是如何拆分0501150001,如0501150001,然后为下一个订单递增0002并使其0501150000从而0501150009 0501150010并使上面的代码有意义。

如何使用 c# 拆分值并递增部件

你必须将值存储在字符串中。

对于数字,您必须使用这样的格式。

int value = 1;
String finalnumber = DateTime.Now.ToString("dd") + DateTime.Now.ToString("MM") + DateTime.Now.ToString("yy") + value.ToString("0000");
 Console.WriteLine(value.ToString("0000")); // to format number only.

获取为数字

long finalnumber = Convert.ToInt64( DateTime.Now.ToString("dd") + DateTime.Now.ToString("MM") + DateTime.Now.ToString("yy") + value.ToString("0000"));

由于您显示的代码对于订单 ID 的每个部分始终具有相同的长度,因此您可以按长度拆分并将最后一部分转换为整数。请记住,如果 orderId 的任何部分将来开始使用不同的长度,这将中断:

// get the date part of the string by length
string datePart = orderId.Substring(0, 6);
// get the count part of the string by length and cast to integer
int countPart = Int32.Parse(orderId.Substring(6, 4));
// increment the count
countPart++;
// convert the count back into a string and pad with zeroes to get length 4
string newCount = countPart.ToString().PadLeft(4, '0');
// combine with the datepart to get the new OrderId
string newOrderId = datePart + newCount;

这应该为你指明正确的方向...

int existingTodayOrdersCount = db.Orders
    .Where(x => x.Order_Date.Value.Date == DateTime.Now.Date)
    .Count();
string newOrderId = string.Format(
    "{0:yyMMdd}{1:0000}",
    DateTime.Now,
    existingTodayOrdersCount + 1);
  • 比较两个日期时,您可以只对DateTime对象调用.Date。无需明确比较年、月和日
  • 要连接数值或使用前导零设置数值的格式,您需要将其视为string
  • 上面的代码使用自定义数字格式字符串 ( 0000 ) 和自定义日期和时间格式字符串 (yyMMdd )。

不过要注意微妙的错误...

  • 如果您今天已经有 9999 个订单怎么办?
  • 如果这段代码在午夜执行怎么办(DateTime.Now执行过程中可以换行到第二天吗?
  • 如果从数据库中删除订单记录,在这种情况下newOrderId可能会与现有订单冲突,该怎么办?