0

我有一个DataRow[]由 3 列组成的列,我想根据最接近某个给定值的列值对集合进行排序。即Abs(column - given_value)。有人可以给我一些想法,我怎么能做到这一点?

4

2 回答 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 回答