我有一个DataRow[]
由3列组成我想根据最接近某个给定值的列值对集合进行排序。即Abs(column - given_value)
。
有人可以告诉我如何实现这一目标吗?
答案 0 :(得分:0)
你可以试试这个:
var results = collection.OrderBy(
row => Math.Abs(Convert.ToInt32(row["ColumnName"]) - given_value));
或Convert.ToDouble,我不知道你正在使用的类型。
注意:该列是否允许 null ,您应该在转换前先检查DBNULL
。
答案 1 :(得分:0)
您可以使用Linq和Math.Abs
IEnumerable<DataRow> orderedRows = rows
.OrderBy(r => Math.Abs(r.Field<int>("column") - given_value));
如果要创建新阵列:rows = orderedRows.ToArray();
将r.Field<int>
替换为实际类型。如果它只是一个字符串,你需要先转换它:
IEnumerable<DataRow> orderedRows = rows
.OrderBy(r => Math.Abs(int.Parse(r.Field<string>("column")) - given_value));