删除操作后更新索引

时间:2017-07-16 10:30:30

标签: c# .net linq

我有一个具有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,或者在顺序的情况下什么都不做

1 个答案:

答案 0 :(得分:0)

后删除CustomerIndex为2的记录,运行以下SQL:

UPDATE TableName SET CustomerIndex = CustomerIndex - 1 WHERE CustomerIndex > 2

这将确保所有&#39;更高的客户指数。记录减少1来补偿。

同样,如果客户删除CustomerIndex为5,则将上述2的引用更改为5。