2013-04-28 29 views
0

這裏是工作的代碼我有:是一個有條件的string.join <object>從DataRow比string.replace效率更高?

DataSet myDataSet = new DataSet(); 
mySqlDataAdapter.Fill(myDataSet); 
DataTable positionData = myDataSet.Tables["Table"]; 
if (siteData.Rows.Count > 0) 
{ 
    positionDV = string.Join<object>(", ", 
     from r in siteData.Rows.OfType<DataRow>() select r[1]); 
} 
else 
{ 
    positionDV = ""; 
} 

positionDV的內容看起來像這樣「14,47,5,11」等,其中對於數據庫中的每個NULL值一個空格。

我想實現的是,NULL的值實際上是作爲NULL寫入字符串的。所以上面的例子看起來像「14,47,5,null,11」。

positionDV只是爲了簡潔而顯示的一個字符串,實際上每個數據集有幾十個,每個數據集接近100,000個值。

我在找什麼是插入null而不是空格的方法。在string.Join中創建一個條件會更有效率嗎(如果是這樣,我該怎麼做?),或者更有效的方法是直接創建字符串,然後創建一個單獨的賦值來執行此操作所以:

positionDV += positionDV.replace(", ,", ", null,"); 

回答

1

只使用Enumerable.SelectDataRow.Field支持可空類型。然後你可以使用條件運算符(?:)得到int值作爲字符串或「null」如果它是空/空的:

IEnumerable<int?> positionValues = myDataSet.Tables["Table"].AsEnumerable() 
    .Select(r => r.Field<int?>(1)); 
IEnumerable<string> positions = positionValues 
    .Select(v => v.HasValue ? v.Value.ToString() : "null"); 
string positionDV = string.Join(", ", positions); 
+0

太棒了,謝謝! – 2013-04-28 20:31:42

相關問題