as stated just move the initial invoice value out of the loop. you also need to use array indexing. a rename of orderNum to lastOrderNum would help reader of code:
string lastOrderNum = "";
int inv = 10001;
for (int i = 0; i < _ORderid.Count(); i++)
{
var pro = new tbl_Sell();
pro.Date = DateTime.Now;
pro.productID = _productid[i];
pro.OrderNumber = _OrderNumber[i];
if(lastOrderNum == _OrderNumber[i])
{
pro.InvoiceNO = Convert.ToString(inv);
}
else
{
pro.InvoiceNO = Convert.ToString(++inv);
lastOrderNum = _OrderNumber;
}
_context.tbl_Sells.Add(pro);
}
_context.SaveChanges();
note: this code will only work if the _product, _OrderNumber arrays are at least as large as _ORderid array. also it will fail, if the _OrderNumber array is not in order. if the _OrderNumber is not sorted, then use a dictionary.
var orderInvoiceNumber = new Dictionary<string,int>();
int inv = 10001;
for (int i = 0; i < _ORderid.Count(); i++)
{
var pro = new tbl_Sell();
pro.Date = DateTime.Now;
pro.productID = _productid[i];
pro.OrderNumber = _OrderNumber[i];
if(orderInvoiceNumber.ContainsKey(_OrderNumber[i]))
{
pro.InvoiceNO = orderInvoiceNumber[_OrderNumber[i]];
}
else
{
pro.InvoiceNO = Convert.ToString(++inv);
orderInvoiceNumber[_OrderNumber[i]] = inv;
}
_context.tbl_Sells.Add(pro);
}
_context.SaveChanges();