附加复制名称方式的改进(1)

时间:2018-06-05 15:54:27

标签: c# asp.net-mvc entity-framework

我正在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});
}

现在,我正在追加"拷贝"每一份副本。相反,我想做的是例如:" Item"然后第一个副本将是"项目(1)"如果他们要复制" Item"再次,名称将是"项目(2)"等。

修改
我现在在下面的答案中发布了一个新的(在下面的评论中更新了错误)功能方法。

  

如果有人看到代码改进或更有效的方法来完成同样的事情,请告诉我。

1 个答案:

答案 0 :(得分:0)

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});
    }

带有两位数的新功能方法,支持名称中的括号。仍然会遇到“Wood Clock”和“Clock”的问题。