2014-06-20 25 views
0

我有一個linq查詢,我有兩個數據表,我加入到一起並循環使用.foreachforeach中的操作數據。當我循環遍歷時,如何獲得行的行索引?Linq查詢,循環通過數據表,加入並獲得索引

我知道如何去除它的連接,簡單的方法是在linq語句前加一個int變量,然後在foreach中增加,但想知道我是否可以在此添加.Select(Row,index) => new {row,index})查詢

Datatable1.AsEnumerable() 
      .Join(Datatable2.AsEnumerable(), 
       dt1row => dt1row.Field<string>("name"), 
       dt2row => dt2row.Field<string>("name")) , 
       (dt1row, dt2row) => new { dt1row, dt2row }).ToList() 
      .ForEach(o => 
      { 
       //check if value for fields is the same in 


      }); 
+0

一樣強大的LINQ是,該代碼只是做我的頭!大聲笑:) –

回答

0

你可以試試這個:

Datatable1.AsEnumerable() 
      .Join(Datatable2.AsEnumerable(), 
       dt1row => dt1row.Field<string>("name"), 
       dt2row => dt2row.Field<string>("name")) , 
       (dt1row, dt2row) => new { dt1row, dt2row }) 
      .Select((row, index)=> new 
        { 
         Index=index, 
         Dt1row = row.dt1row, 
         Dt2row = row.dt2row 
        }).ToList() 
        .ForEach(o => 
        { 
         //check if value for fields is the same in 
        }); 
+0

他爲什麼需要一個ToList()? –

+0

他需要'ToList()',因爲'ForEach()'是'List'的一個方法。你不能在linq查詢的結果上調用它,它通常是一個'IEnumerable'。 – Christos

+0

那麼他應該寫自己的ForEach 公共靜態的IEnumerable 的ForEach (這IEnumerable的源,動作動作) 並調用ToList()之後,儘管它幾乎是在這種情況下,同樣的事情(有可能是一些性能優勢或串聯的LINQ表達式,仍然針對IEnumrable工作 。{ 的foreach(源T形元件) { 動作(元素);} 返回源; } –