我有一个清单,里面有一些版本。
样本数据 :
"4.5","2.1","2.2.1","7.5","7.5.3","N/A","2.3.4.5"
正如您所看到的那样,我正在尝试按降序对列表进行排序,降序3.8.5
为invalid
number&NA
是无效的。
代码:
decimal result; var sortedVData = vData.OrderByDescending(v => decimal.TryParse(v.vCode, out result) ? Convert.ToDecimal(v.vCode) : decimal.MaxValue);
输出: "NA" , "7.5.3" , '2.3.4.5' , "2.2.1" , '7.5' , '4.5' , '2.1'
正如你在我看别的(:)
条件我做decimal.MaxValue
,使NA
前来顶部是否有无效值(用任何文本字符串),但2.2.1
应该是一个例外,应该数工作(强硬2.2.1或任意数量的具有多个小数一个是从版本的角度来看无效,我希望它们有条件地有效。
预期结果 : "NA" , "7.5.3" , "7.5" , "4.5" ,"2.3.4.5" ,"2.2.1" , "2.1"
您可以Version.TryParse
对LINQ查询使用和此扩展方法:
public static Version TryGetVersion(this string item) { Version ver; bool success = Version.TryParse(item, out ver); if (success) return ver; return null; }
那么完整的查询很简单:
var sortedVData = vData .Select(v => new { Obj = v, Version = v.vCode.TryGetVersion() }) .OrderBy(x => x.Version != null) // first all invalid versions .ThenByDescending(x => x.Version) // then by version descending .Select(x => x.Obj);
因此,实际上最好在类中存储版本而不是字符串。
这是更好地使用这个扩展在LINQ查询比使用本地变量。