我想知道确切的行号,我正在使用此代码
DataRow[] resultsize = dt.Select("psize like '%" + hdncurrentsize.Value + "%'");
但结果始终为1
,但不是完全匹配的行号。
答案 0 :(得分:3)
如果您有兴趣知道行位置,可以试试这个
DataRow[] resultsize = dt.Select("psize like '%" + hdncurrentsize.Value + "%'");
foreach(var row in resultsize){
var idx = dt.Rows.IndexOf<DataRow>(row);
}
或者
DataRow[] allRows;
dt.Rows.CopyTo(allRows,0);
foreach(var row in resultsize){
var idx = Array.FindIndex<DataRow>
(allRows, (item) => { return item == row; });
}
答案 1 :(得分:1)
您的代码似乎是正确的。为什么你确定,返回的行数是错误的?
此外,您可以使用Linq to DataSet过滤行(它将与您的DataTable.Select
相同,但更具可读性的强类型方式)
var rows = from row in dt.AsEnumerable()
where row.Field<string>("psize").Contains(hdncurrentsize.Value)
select row;
int resultSize = rows.Count();
BTW 什么类型有hdncurrentsize.Value
它是一个字符串(我认为是)?
UPDATE 因此您正在搜索行索引(下面的代码只会循环数据表一次,而不会在过滤后搜索每个找到的行的索引):
var indexes = dt.AsEnumerable()
.Select((row, index) => new { row, index })
.Where(x => x.row.Field<string>("psize").Contains(hdncurrentsize.Value))
.Select(x => x.index);