0

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

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

4 回答 4

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

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

于 2012-11-15T10:53:51.157 回答
1

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

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

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

于 2012-11-15T11:02:37.940 回答
1

的参数Enumerable.Rangestartcount。这意味着它不会直接替换 for 循环。

for(var i = 5; i < 8; ++i)将产生从 5 到 7 的数字。

Enumerable.Range(5, 8)将产生从 5 到 12 (5+8-1) 的数字。

要获得预期的效果,Enumerable.Range(start, end - start)就需要使用。

于 2015-11-19T16:23:17.497 回答
0

试试这个,

Enumerable.Range(2, noOfColumns).ToList().ForEach(r => { sql.AppendFormat(" [{0}{1}] [varchar]({2}),", "commodity" columnLength); });
于 2012-11-15T10:57:57.777 回答