我有一个DataRow[]
由 3 列组成的列,我想根据最接近某个给定值的列值对集合进行排序。即Abs(column - given_value)
。有人可以给我一些想法,我怎么能做到这一点?
问问题
3040 次
2 回答
0
你可以试试这个:
var results = collection.OrderBy(
row => Math.Abs(Convert.ToInt32(row["ColumnName"]) - given_value));
或 Convert.ToDouble,我不知道您使用的类型。
注意:该列是否允许nullDBNULL
,您应该在转换之前先检查它。
于 2013-09-30T14:18:03.887 回答
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));
于 2013-09-30T14:18:14.790 回答