2011-08-23 44 views
0

我想从我的数组中循环创建一个字符串。然后该字符串将被放置在SelectCommand中。循环生成的字符串

foreach循环是:

foreach (Object obj in arrFields) 
      { 
       String.Join(" {0}", obj); 
      } 

和的SelectCommand是:

Custom.SelectCommand = "SELECT " + String.Join(", ", arrFields) + " FROM Employee WHERE Employee_ID = " + a; 

我来得到这个工作最接近的是以下

串newList

  foreach (Object obj in arrFields) 
      { 
       newList = string.Format(" {0}", obj); 
      } 

Custom.SelectCommand = "SELECT " + newList + " FROM Employee WHERE Employee_ID = " + a; 

我遇到的这个问题是,我在FROM之前结束了一个',' - 如何防止在FROM语句之前插入','?

+0

可能不是直接有用,但String.Join每次在现有字符串上操作时都会给出新字符串,因此会创建大量堆字符串。使用StringBuilder提高效率。 – Zenwalker

+0

@Zenwalker - 'String.Join'使用'UnSafeCharBuffer'来构建字符串,并且不会创建一堆中间字符串。 – Enigmativity

+0

您有权使用UnSafeCharbuffer,从而使Join更快,但只适用于更小的阵列。 – Zenwalker

回答

2

这是你想要的,因为arrFieldsArrayList

Custom.SelectCommand = "SELECT " + string.Join("," , arrFields.ToArray()) + 
         " FROM Employee WHERE Employee_ID = " + a; 
+0

当我尝试使用该代码行时遇到:“多部分标识符”System.Collections.ArrayList“无法绑定。 ” – nick

+0

哦,它是一个ArrayList?用arrFields.ToArray()替换arrFields,它会起作用。 OMG! –

+0

OMG!非常感谢!通过没有.ToArray()代码试图做什么? – nick

0

每次迭代时间你替换循环中的newList对象。使用contact country或stringBuilder来提高效率

+0

我不认为有必要在这里使用'StringBuilder'来提高效率。连接的数量很少,并且字符串的大小很小。在这种情况下,代码可读性将是我的首要任务。 – Enigmativity

+0

好吧,我不知道代码有多少次迭代,甚至在堆上多次创建更小的对象,我不认为它的有效权利?可能你必须对此进行表现研究。 – Zenwalker

+0

我刚刚做了一个测试,将100个字符的字符串连接到自己100次 - '+ ='=> 0.3966ms - 'StringBuilder' => 0.2611ms。做1000 x 1000导致2,092ms vs 0.8826ms。所以对于大多数连接情况来说,普通的旧的'+ ='很好。 – Enigmativity