【发布时间】:2013-05-13 15:23:39
【问题描述】:
我的数据库中有以下两个名称:SMITH 和 SMITH1
如果数据库中存在名称,如果只有 SMITH 存在,我想给它附加一个 1,并且如果带有数字的名称已经存在,我想增加名称的数字部分。
是否可以在一个 LINQ 语句中执行此操作?现在,我正在做:
string name = string.Format("{0}{1}{2}",first_name,middle_name,last_name).ToUpper();
//Check for duplicates
while(names.SingleOrDefault (d => d.Name== name) != null)
{
//Get last char
char lastChar = name[name.Length - 1];
//Last char is number
if(Char.IsNumber(lastChar))
{
name = name.Replace(lastChar,Convert.ToChar(Convert.ToInt32(lastChar) + 1));
}
else
{
name = (name + 1);
}
}
由于我的 while 循环中有 LINQ 查询,它是否会在每次必须循环返回时执行选择?
另外,如果有人知道一种方法可以使它更简洁但可读,那会很棒吗?
这确实适用于没有数字或 1 - 9 的名称,但是当我到达 10 时会发生什么,它只会替换最后一个字符,在这种情况下为 0,我该如何处理?
有没有办法在 LINQ 中获取数字部分,所以 SMITH12 会返回 12
【问题讨论】:
-
@TimSchmelter -
while(names.SingleOrDefault (d => d.Name== name) != null)。这不是 LINQ 查询吗? -
@TimSchmelter:他的 while 循环中有一个 LINQ 语法语句作为他的
if条件。 -
@TimSchmelter - 它的正确名称是什么?
-
我认为这是一个 LINQ 查询,因为我认为它会像
SELECT Name FROM Table WHERE NAME = 'xxxxx'这样对数据库进行查询。 -
我支持@Jeff。您的方法需要大量迭代,而检查用户名并建议替代方案(通过适当的可用性检查)是一种更简单的方法。它还可以防止您的系统泄露与注册的名为“JohnDoe”的用户数量相关的信息。