2010-12-13 118 views
2

對不起,我只是拿起LINQ,而且相對比較新。將此代碼轉換爲LINQ?

是否可以將以下內容轉換爲LINQ?

foreach (DataRow row in results.Rows) 
    { 
     if (row["REMARKS"].ToString() == "Passes" || row["REMARKS"].ToString() == "Promoted") 
     { 
      result = String.Concat(result,row["ROLL_NO"].ToString()," "); 
     } 
    } 
+0

謝謝你們..這是非常快,你的脂肪酶.. – 2010-12-13 08:03:01

回答

5

我們不知道是什麼的result初始值,這使得這個棘手的,但假設你其實只想要一個空格分隔的列表,我應該這樣做:

var query = from DataRow row in result.Rows 
      let remarks = row["REMARKS"].ToString() 
      where remarks == "Passes" || remarks == "Promoted" 
      select row["ROLL_NO"].ToString(); 

string results = string.Join(" ", query); 

(請注意,DataTable沒有實現IEnumerable<DataRow>,這就是爲什麼我使用顯式類型範圍變量。另一種方法是調用result.Rows.AsEnumerable()row隱式鍵入。)

最後一行假設.NET 4,它比以前的版本有更多的string.Join過載。否則,這將做到這一點:

string results = string.Join(" ", query.ToArray()); 

當然,如果你使用LINQ,那麼你可能想擺脫DataTable等遠處開始有和使用LINQ到SQL,實體框架,NHibernate的或任何的其它可用選項的:)

+0

+1:上帝使用'let'來整理查詢。 – 2010-12-13 07:59:43

+0

是的..這是最簡單的閱讀,這就是爲什麼我想轉移到linq的第一位。謝謝喬恩!順便說一句,你離開Datatable等是什麼意思? – 2010-12-13 08:01:08

+0

我想他的意思是轉移到LINQ to SQL,而不是使用DataTable來獲取數據,然後LINQ來處理它。純粹的LINQ to SQL將使整個事情變得更加可讀,並允許您發出實際將數據提取到數據表中的代碼。 – 2010-12-13 08:09:25

2
results.Rows 
     .Cast<DataRow>() // If you need this line or not depends on the type of result.Rows 
     .Where(row => row["REMARKS"].ToString() == "Passes" || 
        row["REMARKS"].ToString() == "Promoted") 
     .Aggregate(result, (acc, row) => String.Concat(acc, row["ROLL_NO"].ToString()," ")) 
+0

我喜歡這個比我的回答更好,這是一個純粹的LINQ實現 – Rony 2010-12-13 07:54:50

1
result = results.Rows.Cast<DataRow>().Where(row => row["REMARKS"].ToString() == "Passes" || row["REMARKS"].ToString() == "Promoted").Aggregate(result, (current, row) => String.Concat(current, row["ROLL_NO"].ToString(), " ")); 
+0

+1 - COS這個工作,但我真正愛瓊斯的答案是它的簡單性和可讀性! – 2010-12-13 08:00:27

+0

感謝您的+1。我同意,Jon的確很可讀。 – jvanrhyn 2010-12-13 08:08:48

0
string.Join(" ", result.Rows.Cast<DataRow>().Where(r => r["REMARKS"].ToString() == "Passes" || r["REMARKS"].ToString() == "Promoted").Select(r => r["ROLL_NO"].ToString()).ToArray()); 
+0

這不會編譯 - 你需要調用'Cast '或者使用'Rows.AsEnumerable()' - 因爲'DataTable'沒有實現'IEnumerable '。 – 2010-12-13 07:55:55

+0

是的,這是真的 – Rony 2010-12-13 07:58:53