2014-05-22 97 views
1

我需要一些幫助,例如我在我的數據表中有以下項目如何獲取數據表中的索引

第1列|第2列|第3列|第4列|第5列|第6欄

RowX | 1 | 12 | 0 | |

RowX | 2 | 12 | 0 | |

RowX | 3 | 12 | 0 | |

RowY | 3 | 12 | 1 | |

RowY | 1 | 12 | 1 | |

我想要索引這一行

RowX | 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」到「廉政」轉換。如何獲得索引?

是否有另一種方法來實現這一目標?

預先感謝...

+0

什麼是DataRowX – mrida

回答

0

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(); 

如果你確定它僅包含一個可以使用FirstSingle(上引發異常多)。

int firstIndex = indices.First(); 
DataTable1.Rows[firstIndex]["Column5"] = intUpdateValueColumnx; 
// ... 
+0

謝謝......它的工作完美.... – cahmad

0

index應該是一個int表示位置或要更改該行的「指標」。

要設置indexEnumerableRowCollection你的第一線,

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(); 

這將更新所有符合條件的行。可能有很多或沒有。