[英]Sorting a DataRow Collection with a value closest to certain value
I have a DataRow[]
consisting of 3 columns I want to sort the collection based on a columns value closest to some given value. 我有一个由3列组成的
DataRow[]
,我想根据最接近某个给定值的列值对集合进行排序。 ie Abs(column - given_value)
. 即
Abs(column - given_value)
。 Can somebody please give me some idea how I can accomplish that ? 有人可以告诉我我如何做到这一点吗?
You could try this: 您可以尝试以下方法:
var results = collection.OrderBy(
row => Math.Abs(Convert.ToInt32(row["ColumnName"]) - given_value));
Or Convert.ToDouble, i don't know the type you are using. 或Convert.ToDouble,我不知道您使用的类型。
Note: Is the column allows null , you should check it for DBNULL
first before Converting. 注意:如果该列允许null ,那么在转换之前应首先检查它是否为
DBNULL
。
You can use Linq and Math.Abs
您可以使用Linq和
Math.Abs
IEnumerable<DataRow> orderedRows = rows
.OrderBy(r => Math.Abs(r.Field<int>("column") - given_value));
If you want to create a new array: rows = orderedRows.ToArray();
如果要创建一个新数组,请执行以下操作:
rows = orderedRows.ToArray();
Replace r.Field<int>
with the actual type. 将
r.Field<int>
替换为实际类型。 If it's just a string you need to convert it first: 如果只是字符串,则需要先将其转换:
IEnumerable<DataRow> orderedRows = rows
.OrderBy(r => Math.Abs(int.Parse(r.Field<string>("column")) - given_value));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.