Улучшения на пути добавления скопированных имен с (1) - PullRequest
0 голосов
/ 05 июня 2018

Я работаю на сайте аукциона в asp.net mvc.У меня есть метод в моем ItemsController, который копирует объект item как новый листинг.Мой текущий код указан ниже:

public ActionResult Copy(Guid id)
{
    Item item = db.Items.Find(id);
    Cat cat = db.Cats.Find(item.CatId);
    Item copy = new Item(Guid.NewGuid(), item.ItemName + " copy", 
      item.ItemDesc, item.ModelNo, item.RetailValue, item.ImageFileName,
      item.StartDate, item.EndDate, item.InitialBid, item.IncrementBy,
      null, null, null, cat);

    db.Items.Add(copy);
    db.SaveChanges();
    return RedirectToAction("Index", "Items", new {catId = item.CatId});
}

Сейчас я добавляю «копию» к каждой копии.Вместо этого я хотел бы, например: «Элемент», тогда первая копия будет «Элемент (1)», и если бы они снова скопировали «Элемент», имя было бы «Элемент (2)» и т. Д.

Редактировать:
Теперь у меня есть новый (обновленный для ошибок в комментариях ниже) опубликованный в моем ответе ниже.

Если кто-то увидит улучшения кодаили более эффективный способ сделать то же самое, дайте мне знать.

1 Ответ

0 голосов
/ 05 июня 2018
public ActionResult Copy(Guid id)
    {
        Item item = db.Items.Find(id);
        Cat cat = db.Cats.Find(item.CatId);
        int newCopyValue = 0;
        string newName;

        List<Item> items = db.Items.Where(i => i.ItemName.Contains(item.ItemName)).OrderBy(i => i.ItemName.Length).ThenBy(i => i.ItemName).ToList();
        if (items.Count == 1)
        {
            newName = item.ItemName + " (1)";
        }
        else
        {
            Item lastCopy = items.ElementAt(items.Count - 1);
            String copyName = lastCopy.ItemName;

            if (copyName[copyName.Length - 3] == '(' && copyName[copyName.Length - 1] == ')')
            {
                newCopyValue = Convert.ToInt32(copyName[copyName.Length - 2].ToString()) + 1;
            }
            else if (copyName[copyName.Length - 4] == '(' && copyName[copyName.Length - 1] == ')')
            {
                string doubleDig = copyName[copyName.Length - 3].ToString() + copyName[copyName.Length - 2].ToString();
                newCopyValue = Convert.ToInt32(doubleDig) + 1;
            }
            newName = item.ItemName + " (" +  newCopyValue.ToString() + ")";
        }

        Item copy = new Item(Guid.NewGuid(), newName, item.ItemDesc, item.ModelNo, item.RetailValue, item.ImageFileName, item.StartDate, item.EndDate, item.InitialBid, item.IncrementBy, null, null, null, cat);

        db.Items.Add(copy);
        db.SaveChanges();
        return RedirectToAction("Index", "Items", new {catId = item.CatId});
    }

Новый метод функционирования с двузначным числом и поддержкой скобок в именах.Может по-прежнему возникать проблема с примером «Деревянные часы» и «Часы».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...