C# 对包含两个不同小数位的版本进行排序
目前,我从一个使用Selenium的网站上获得了C# 对包含两个不同小数位的版本进行排序,c#,sql,sorting,C#,Sql,Sorting,目前,我从一个使用Selenium的网站上获得了发布版本,并将其存储为字符串 发布版本有14.14,14.14.4,14.15,14.15.1,14.15.2等 我需要使用C#对它们进行排序,数据库管理员需要能够使用SQL对它们进行排序。所有发布版本项当前都存储为字符串 如果这很重要的话,我会使用LINQtoSQL来完成我所有的SQL工作 用C#和SQL对它们进行排序的最佳方法是什么?作为字符串?或者我应该把它们转换成货币?如果转换它们,将使用什么数据类型?在C中,您可以将它们存储为(或至少转换
发布版本
,并将其存储为字符串
发布版本有14.14
,14.14.4
,14.15
,14.15.1
,14.15.2
等
我需要使用C#对它们进行排序,数据库管理员需要能够使用SQL对它们进行排序。所有发布版本
项当前都存储为字符串
如果这很重要的话,我会使用LINQtoSQL来完成我所有的SQL工作
用C#和SQL对它们进行排序的最佳方法是什么?作为字符串?或者我应该把它们转换成货币?如果转换它们,将使用什么数据类型?在C中,您可以将它们存储为(或至少转换为)版本,该版本还支持正确的排序:
var strings = new List<string> { "14.14", "14.14.4", "14.15", "14.15.1", "14.15.2" };
var versions = strings.Select(v => Version.Parse(v)).ToList();
versions.Sort(); // or OrderBy in the LINQ query above
var strings=新列表{“14.14”、“14.14.4”、“14.15”、“14.15.1”、“14.15.2”};
var versions=strings.Select(v=>Version.Parse(v)).ToList();
versions.Sort();//或上面LINQ查询中的OrderBy
这里有一个问题显示了如何对数据库中的版本进行排序:如果您对来回转换没有问题,那么将该版本转换为int。由于该版本最多有3个部分,只需将其转换为{0}*10000+{1}*100+{2},以避免同时使用C#和SQL编写排序代码,您可以开始使用固定宽度编号保存版本014.015.001
,这样词法排序在这两个版本中都能正常工作,但显然您可能不希望或无法控制它。在C#中,您可以只提供一个自定义的IComparer。