我有需要按“IST”字段排序的对象列表。 字段“IST”始终包含数值但不知何故开发人员将其设计为字符串类型。
示例:
当我使用
时var temp = Dsrm.OrderBy(x => x.IST);
排序不正确。 有没有一个简单的解决方案来解决这个问题。
不,我不允许更改表格的定义。
答案 0 :(得分:4)
使用Convert.ToInt32
(不确定您的LINQ提供商是否支持int.Parse
)
var temp = Dsrm.OrderBy(x => Convert.ToInt32(x.IST));
当然,与首先使用正确的类型相比,效率更低,安全性更低。
答案 1 :(得分:1)
因为它是一个字符串,它有点困难,我会实现一个自定义的IComparer<T>
类。根据我的收集,项目的结构可以是数字,也可以是数字后跟字母的组合。如果是这种情况,则以下IComparer<T>
实现应该可以正常工作
public class CustomComparer : IComparer<string>
{
public int Compare(string x, string y)
{
var regex = new Regex("^(d+)");
// run the regex on both strings
var xRegexResult = regex.Match(x);
var yRegexResult = regex.Match(y);
// check if they are both numbers
if (xRegexResult.Success && yRegexResult.Success)
{
return int.Parse(xRegexResult.Groups[1].Value).CompareTo(int.Parse(yRegexResult.Groups[1].Value));
}
// otherwise return as string comparison
return x.CompareTo(y);
}
}
使用此IComparer<T>
,您可以通过执行
var myComparer = new CustomComparer();
var temp.Sort(myComparer);