私のデータベースには次の 2 つの名前があります:SMITH
とSMITH1
名前がデータベースに存在する場合は、存在する場合にのみ 1 を追加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