从/不使用数字获取数据库中的对象(数字)与副本编号一样

时间:2016-04-13 08:56:43

标签: c# entity

我正在创建一个"文件夹" MVC系统。 (C#+身份)

用户可以创建"文件夹"如果相同的名称与另一个文件夹相匹配,则必须在名称中添加(编号)。

文件夹:

  • 代码
  • 测试
  • 测试(1)
  • 代码(1)
  • 代码(2)
  • 测试此网站

让我们说新用户想要添加另一个名为Test的文件夹。

基本我需要计算多少"文件夹"存在于exact nameExact name + (number)

int count = db.Folders.Where(i => i.Name == Name).ToList().Count

它应该返回(使用正确的逻辑)count = 2。然后create Test (2)

我似乎无法弄清楚如何重新编写代码,因此我根据逻辑正确计算匹配。有人能指出我正确的方向吗?。

1 个答案:

答案 0 :(得分:1)

db.Folders.Where(i => i.Name == Name).ToList().Count

将为您提供名称正确的匹配#34;名称"。

我认为你必须查询名称的起始位置"姓名"和长度="名称" +空格+支架+数字+支架。

然后你必须确保你没有得到像"测试(e)"但是"测试(3)"

修改

请注意,您必须获取名称而不是仅计数,因为您可能会遇到以下情况:

  • 测试
  • 测试(1)
  • 测试(13)

在这种情况下,您的文件夹必须是"测试(2)"相反"测试(4)"或"测试(14)"

可能有很好的算法,但这就是我现在的想法:

您将获得以文件夹名称开头的名称列表:

var items = db.Folders.Where(i => i.Name.StartsWith(Name)).ToList();

然后:

     string whatIWant = Name;
     for(int i=1;; i++)
     {
        whatIWant = Name + " (" + i.ToString() + ")";
        if(!items.Contains(whatIWant))
        {
            break;
        }
     }

// proceed with insert