c# – 转换为十进制并执行OrderBy
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 转换为十进制并执行OrderBy,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1687字,纯文字阅读大概需要3分钟。
内容图文
![c# – 转换为十进制并执行OrderBy](/upload/InfoBanner/zyjiaocheng/827/c008898dc61f4eec969720d98c3b87d7.jpg)
我的数据表包含所有字符串列,但在某些列中,我们填充数值.当我在该数字列的数据表上执行orderby时,它没有正确排序.在订购我的桌子之前
Name Account Department
Kiran 1100 CSC
Subbu 900 CSC
Ram 500 CSC
Raj 800 CSC
Joy 400 CSC
订购之后看起来像
Name Account Department
Kiran 1100 CSC
Joy 400 CSC
Ram 500 CSC
Raj 800 CSC
Subbu 900 CSC
我的代码:
public DataTable sortData(string columnName)
{
DataTable dt1=new DataTable();
return dt1=dataMgr[DatabaseFileNames.ControlDatabase]["OrderedTableName"]
.Select("Department='CSC'")
.OrderBy(x=>!string.IsNullOrEmpty(x.Field<string>(columnName)))
.CopyToDataTable();
}
解决方法:
我想了很长一段时间,我提出的解决方案非常明显:基本上订购都是关于比较 – 所以我们为什么不写一个自定义Comparer ……
public class MyComparer : IComparer<string>
{
private readonly string _columnName;
public MyComparer(string columnName)
{
_columnName = columnName;
}
public int Compare(string leftValue, string rightValue)
{
double leftDouble, rightDouble;
switch (_columnName)
{
case "Account":
if (Double.TryParse(leftValue, out leftDouble) && Double.TryParse(rightValue, out rightDouble))
{
return leftDouble.CompareTo(rightDouble);
}
else
{
return String.Compare(leftValue, rightValue);
}
default:
return String.Compare(leftValue, rightValue);
}
}
}
…然后只需将其添加到OrderBy中……
public DataTable sortData(string columnName)
{
DataTable dt1=new DataTable();
return dt1=dataMgr[DatabaseFileNames.ControlDatabase]["OrderedTableName"]
.Select("Department='CSC'")
.OrderBy(x => x.Field<string>(columnName) ?? String.Empty,
new MyComparer(columnName)
)
.CopyToDataTable();
}
……我们已经完成,甚至可以扩展该解决方案以使用其他数据类型,例如约会时间.
内容总结
以上是互联网集市为您收集整理的c# – 转换为十进制并执行OrderBy全部内容,希望文章能够帮你解决c# – 转换为十进制并执行OrderBy所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】