我正在为我的公司开发的一个程序开发一个更新工具。要更新程序,我需要执行一些SQL-脚本。这些脚本必须有正确的顺序(当然)。我有一份名单。SqlScriptModel有一个'Name‘属性,我用来对列表进行排序。从Programm版本开始(例如: 5.8.1.0)。目前,我的“排序”列表如下:
5.8.0.1 - Update Script
5.8.0.10 - Update Script
5.8.0.11 - Update Script
5.8.0.2 - Update Script当然,5.8.0.10脚本需要在5.8.0.2脚本之后执行。
我的代码如下所示:
SqlScriptList.Sort((x, y) => string.Compare(x.Name, y.Name));有人也有同样的问题吗?还是有一个指向有效解决方案的链接?我会非常感激的!
发布于 2015-10-12 12:32:23
只需重命名您的文件,使所有版本子字符串都具有相同的长度。使用以下零填充版本的最后一部分:
5.8.0.01 - Update Script
5.8.0.02 - Update Script
5.8.0.10 - Update Script
5.8.0.11 - Update Script如果不想这样做,可以在代码中将版本字符串转换为数字,然后根据该数字进行排序:
string version = "5.8.0.10";
int fullVersionNumber =
version
.Split(new char[] { '.' })
.Select(int.Parse)
.Aggregate((first, second) => first * 100 + second);
// fullVersionNumber = 5080010您可以利用此功能进行如下操作:
public static int GetNumericVersion(string fileName)
{
string version = fileName.Split(new char[] { ' ' })[0];
int fullVersionNumber =
version
.Split(new char[] { '.' })
.Select(int.Parse)
.Aggregate((first, second) => first * 100 + second);
return fullVersionNumber;
}像这样使用它:
SqlScriptList.Sort(
(x, y) => GetNumericVersion(x.Name).CompareTo(GetNumericVersion(y.Name)));发布于 2015-10-12 12:55:07
考虑使用来自版本框架的.Net类,它有一个合适的比较操作符。
样本代码:
List<Version> versions = new List<Version>();
List<string> versionStrings;
// get somehow, the list of version strings in "Version format" - nothing else except x.y.z.k
versionStrings = new List<string>(
new string[]{ "5.8.0.1",
"5.8.0.10",
"5.8.0.11",
"5.8.0.2" }
);
// pupulate list of Version from list of string
versionStrings.ForEach(str => versions.Add(new Version(str)));
//list is not orderded
versions.ForEach(ver => System.Diagnostics.Debug.WriteLine(ver));
// sort the list using the default Version comparison
versions.Sort();
// list is ordered
versions.ForEach(ver => System.Diagnostics.Debug.WriteLine(ver));https://stackoverflow.com/questions/33081135
复制相似问题