2014-01-23 67 views
1

如何在C#.net中使用Linq表達式執行以下代碼?如何將C#.net中的Linq表達式或AsEnumerable轉換爲Foreach循環?

目前,我正在做一個foreach循環的DataTable。

我想用LINQ或AsEnumerable()函數來做到這一點。

當前的C#代碼

protected String GetRecommendMasterSquence() 
{ 
    ArrayList strItems = new ArrayList(); 
    DataTable dt = new DataTable(); 
    foreach(DataRow dr in dt.Rows) { 
     if (Convert.ToBoolean(dr["isSelected"])) { 
      strItems.Add(Convert.ToString(dr["RecommendID"])); 
     } 
    } 
    return string.Join(",", (string[]) strItems.ToArray(Type.GetType("System.String"))); 

} 
+1

你並不需要使用'ArrayList'了。當C#沒有_Generics_時,它屬於過去的日子。改爲使用'List '。 –

+1

@SonerGönül感謝您的建議。偉大的人:) –

回答

3

您可以在可枚舉使用string.Join.ToArray()組合。

string str = string.Join(",", dt.AsEnumerable() 
           .Where(r => r.Field<bool>("isSelected")) 
           .Select(c=>c.Field<string>("RecommendID")) 
           .ToArray()); 
+0

你不需要一個數組來使用'String.Join'(至少.NET 4)。你也忘了添加「Where」。 –

+0

@Adil偉大的回答 –

+0

不客氣@Abhishek – Adil

2

您可以使用table.AsEnumerable + Enumerable.Where

var selectedRecommendIDs = dt.AsEnumerable() 
    .Where(r => r.Field<bool>("isSelected")) 
    .Select(r => r.Field<int>("RecommendID")); 
string result = string.Join(",", selectedRecommendIDs); 

請注意,我假定isSelectedbool列和RecommendIDint列。如果不是這樣,請相應地更改它。無論如何,它應該給你一個想法。無論如何,最好使用DataRow.Field擴展方法,因爲它是強類型的並支持可空類型。

+0

@Tim_Schmelter好的回答與描述..很好 –

0
var ids = dt.Rows 
     .Where(x => !Convert.ToBoolean(x["isSelected"])) 
     .Select(x => Convert.ToString(x["RecommendID"])) 

return string.Join(",", ids); 
+0

你的答案也正確 –

0
 var recommendIds = 
      from myRow in dt.AsEnumerable() 
      where myRow.Field<bool>("isSelected") == true 
      select myRow.Field<string>("RecommendID"); 

     return string.Join(",", recommendIds.ToArray()); 
+0

你的答案也正確 –

相關問題