我有一个具有CustIndex列的Customer表。用户可以从用户界面删除一个客户,例如在索引3处。我需要做什么,然后确定是否有一个客户的索引为4,并将其重新编号为3,(所以基本上保持序列)。 / p>
在那一刻我只有一些代码如下:
private void UpdateCustomerIndexes(IList<CustomerDTO> customers)
{
var customerIndexes = customers.Select(c => new { c.customerId, c.customerIndex });
//unitIndexes.Select(u => u.)
}
我一直想保留CustomerId,所以如果我需要更新数据库,我可以说更新客户设置索引= 3,例如customerid = 4。
因此,如果我在UI上有5个客户,我在索引5处删除了客户
如果我在customerIndexes上设置断点,则数据为:
{ CustomerId = 33, CustomerIndex = 1 },
{ CustomerId = 34, CustomerIndex = 2 },
{ CustomerId = 35, CustomerIndex = 3 },
{ CustomerId = 36, CustomerIndex = 4 }
因此,在这种情况下,CustomerIndex按顺序排列,因此无需执行任何操作。但是,现在我说在UI上删除了CustomerIndex 2。数据现在看起来像:
{ CustomerId = 33, CustomerIndex = 1 },
{ CustomerId = 35, CustomerIndex = 3 },
{ CustomerId = 36, CustomerIndex = 4 }
现在客户索引不按顺序,我需要将CustomerIndex 3重新编号为2,将CustomerIndex 4重新编号为3,然后将其保存到数据库,这样我就可以说更新语句将索引设置为该CustomerId的新值
我知道我的CustomerIndex永远不会超过50,所以使用类似的东西是一个想法:
var list = new List<int>(new[] { customerIndexes.Select(c => c.customerIndex) });
var result = Enumerable.Range(0, 50).Except(list);
但是,我认为这只会告诉我序列中的数字是否缺失 - 我错过了如何保存哪个索引需要更新哪个customerid,或者在顺序的情况下什么都不做
答案 0 :(得分:0)
后删除CustomerIndex
为2的记录,运行以下SQL:
UPDATE TableName SET CustomerIndex = CustomerIndex - 1 WHERE CustomerIndex > 2
这将确保所有&#39;更高的客户指数。记录减少1来补偿。
同样,如果客户删除CustomerIndex为5,则将上述2的引用更改为5。