我填写了DataTable。
在每一行中,我尝试找到一些必须唯一的字符串值。如果我找到具有该值的行,我需要向下(跳过一些行),直到找到包含Expr1
之类的常量字符串的行。现在我需要返回包含Expr1
的所有行。
所以有两个条件:
1 - 找到带有输入值的行Row1
。
2 - 找到包含const值Row1
的{{1}}的最近行并返回它。
Expr1
这是我的Excel文件的外观(我写入数据表的Excel文件中的所有数据)
InputValueToFind|
Week1 | 1
Week2 | 2
Week3 | 3
Total | 6
Expr1 | 4
此代码返回包含DataRow[] netPay = dt.AsEnumerable().Where(row => row[0].ToString().Trim().ToLower().Equals("Expr1".ToLower())).ToArray();
的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
一行(换句话说,我不知道如何使用这两个块代码在一起)。
答案 0 :(得分:0)
如果您在IEnumerable上执行选择,则会有一个可选的通用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 });