按索引比较 DataTable 中的两行
Compare two rows from DataTable by their indexes
我已经填充了DataTable。
在每一行中,我都试图找到一些必须唯一的字符串值。如果我找到具有该值的行,我需要向下(跳过一些行)直到找到具有某些常量字符串(如 Expr1
)的行。现在我需要 return 包含 Expr1
.
的所有行
所以有两个条件:
1 - 查找具有输入值的行 Row1
。
2 - 找到最接近 Row1
的包含常量值 Expr1
和 return 的行。
InputValueToFind|
Week1 | 1
Week2 | 2
Week3 | 3
Total | 6
Expr1 | 4
这是我的 Excel 文件的样子(我将 Excel 文件中的所有数据写入数据表)
DataRow[] netPay = dt.AsEnumerable().Where(row => row[0].ToString().Trim().ToLower().Equals("Expr1".ToLower())).ToArray();
此代码 return DataTable 中包含 Expr1
.
的所有行
for (var i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i][0].ToString().Trim().ToLower().Equals(inputVal.ToLower()))
{
// do some stuff
}
}
使用此代码,我可以获得 InputValue
的行。
问题 - 现在我不知道如何找到与 Expr1
最接近的行与 InputValue
的行(换句话说,我不知道如何使用这两个代码块在一起)。
如果对 IEnumerable 执行 Select,则有一个可选的泛型 int TIn
参数,您可以按以下方式使用它。
Select<DataRow, int, KeyValuePair<int, DataRow>>((row,idx) => new KeyValePair<int, DataRow>(idx, row)
使用该类型,您可以更轻松地执行索引(邻近度)检查。
我会为此创建自己的对象类型
public class IndexDataRowPair
{
public int Index {get;set;}
public DataRow Row {get;set;}
// or, just the values you intend to use
// public string InputValue {get;set;}
// public string ExpressionValue {get;set;}
}
...
// generic Select<TIn, Tin, TResult> parameters will be inferred:=
// Select<DataRow, int, IndexDataRowPair>
dt.Select((row,idx) => new IndexDataRowPair() { Index = idx, Row = row });
我已经填充了DataTable。
在每一行中,我都试图找到一些必须唯一的字符串值。如果我找到具有该值的行,我需要向下(跳过一些行)直到找到具有某些常量字符串(如 Expr1
)的行。现在我需要 return 包含 Expr1
.
所以有两个条件:
1 - 查找具有输入值的行 Row1
。
2 - 找到最接近 Row1
的包含常量值 Expr1
和 return 的行。
InputValueToFind|
Week1 | 1
Week2 | 2
Week3 | 3
Total | 6
Expr1 | 4
这是我的 Excel 文件的样子(我将 Excel 文件中的所有数据写入数据表)
DataRow[] netPay = dt.AsEnumerable().Where(row => row[0].ToString().Trim().ToLower().Equals("Expr1".ToLower())).ToArray();
此代码 return DataTable 中包含 Expr1
.
for (var i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i][0].ToString().Trim().ToLower().Equals(inputVal.ToLower()))
{
// do some stuff
}
}
使用此代码,我可以获得 InputValue
的行。
问题 - 现在我不知道如何找到与 Expr1
最接近的行与 InputValue
的行(换句话说,我不知道如何使用这两个代码块在一起)。
如果对 IEnumerable 执行 Select,则有一个可选的泛型 int TIn
参数,您可以按以下方式使用它。
Select<DataRow, int, KeyValuePair<int, DataRow>>((row,idx) => new KeyValePair<int, DataRow>(idx, row)
使用该类型,您可以更轻松地执行索引(邻近度)检查。
我会为此创建自己的对象类型
public class IndexDataRowPair
{
public int Index {get;set;}
public DataRow Row {get;set;}
// or, just the values you intend to use
// public string InputValue {get;set;}
// public string ExpressionValue {get;set;}
}
...
// generic Select<TIn, Tin, TResult> parameters will be inferred:=
// Select<DataRow, int, IndexDataRowPair>
dt.Select((row,idx) => new IndexDataRowPair() { Index = idx, Row = row });