[英]How to get Index in Datatable
我在這里需要一些幫助,例如我的數據表中有以下項目
第 1 欄 | 第 2 欄 | 第 3 欄 | 第 4 欄 | 第 5 欄 | 第 6 欄 |
---|---|---|---|---|---|
行X | 1 | 12 | 0 | ||
行X | 2 | 12 | 0 | ||
行X | 3 | 12 | 0 | ||
行Y | 3 | 12 | 1 | ||
行Y | 1 | 12 | 1 |
我想得到這一行的索引
行X | 3 | 12 | 0 | |
因為我想更新這一行的第 5 列和第 6 列。 如果我使用上面的查詢
var index = from row in DataTable1.AsEnumerable()
let r = row.Field<string>("Column1")
let s = row.Field<int>("Column2")
let t = row.Field<string>("Column3")
let u = row.Field<string>("Column4")
where r == DataRowX && s == 12 && t == 3 && u == 0
select DataTable1.Rows.IndexOf(row);
DataTable1.Rows[index]["Column5"] = intUpdateValueColumnx;
DataTable1.Rows[index]["Column6"] = intUpdateValueColumny;
DataTable1.AcceptChanges();
這不起作用,因為參數 1:無法從“System.Data.EnumerableRowCollection”轉換為“int”。 如何獲取索引?
有沒有另一種方法來實現這一目標?
index
應該是一個int
,表示要更改的行的位置或“索引”。
您正在使用第一行將index
設置為EnumerableRowCollection
,
var index = from row in DataTable1.AsEnumerable()
let r = row.Field<string>("Column1")
let s = row.Field<int>("Column2")
let t = row.Field<string>("Column3")
let u = row.Field<string>("Column4")
where r == DataRowX && s == 12 && t == 3 && u == 0
select DataTable1.Rows.IndexOf(row);
所以index
實際上是一組索引。
你可能想做類似的事情,
foreach (var row in DataTable1.AsEnumerable().Where(r =>
r.Field<string>("Column1") == DataRowX &&
r.Field<int>("Column2") == 12 &&
r.Field<string>("Column3") == "3" &&
r.Field<string>("Column4") == "0"))
{
row.SetField("Column5", intUpdateValueColumnx);
row.SetField("Column6", intUpdateValueColumny);
}
DataTable1.AcceptChanges();
這將更新與您的條件匹配的所有行。 可能有很多,也可能沒有。
Enumerable.Where
返回多個元素,在這種情況下IEnumerable<int>
,您可以使用foreach
枚舉所有元素:
foreach(int index in indices) // renamed index to indices
{
DataTable1.Rows[index]["Column5"] = intUpdateValueColumnx;
DataTable1.Rows[index]["Column6"] = intUpdateValueColumny;
}
DataTable1.AcceptChanges();
如果您確定它只包含一個,您可以使用First
或Single
(對多個拋出異常)。
int firstIndex = indices.First();
DataTable1.Rows[firstIndex]["Column5"] = intUpdateValueColumnx;
// ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.