用LINQ替换for循环

时间:2012-11-15 10:51:37

标签: linq

是否有一个等同于以下代码的LINQ表达式?

int noOfColumns = 10;
for (int i = 2; i <= noOfColumns+1; i++)
{                    
    sql.AppendFormat(" [{0}{1}] [varchar]({2}),", "commodity", columnLength);
}

4 个答案:

答案 0 :(得分:3)

Enumerable.Range(2, noOfColumns+1)
  .ToList()
  .ForEach(i => 
     sql.AppendFormat(" [{0}{1}] [varchar]({2}),", "commodity" columnLength));

但我不认为它看起来更好: - )。

答案 1 :(得分:1)

对于它的价值,(编译)Linq替换将是:

IEnumerable<string> cols = Enumerable.Range(2, noOfColumns +1)
    .Select(i => string.Format(" [{0}] [varchar]({1})", "commodity", columnLength));
string sql = string.Join(",", cols);

但我必须承认,我不知道你在做什么。

答案 2 :(得分:1)

Gridview1.DataSource = all;的参数为Enumerable.Rangestart。这意味着它不会直接替换循环。

count将生成从5到7的数字。

for(var i = 5; i < 8; ++i)将产生5到12(5 + 8-1)的数字。

要获得所需的效果,需要使用Enumerable.Range(5, 8)

答案 3 :(得分:0)

试试这个,

Enumerable.Range(2, noOfColumns).ToList().ForEach(r => { sql.AppendFormat(" [{0}{1}] [varchar]({2}),", "commodity" columnLength); });