是否存在與以下代碼等效的LINQ表達式?替換爲LINQ的循環
int noOfColumns = 10;
for (int i = 2; i <= noOfColumns+1; i++)
{
sql.AppendFormat(" [{0}{1}] [varchar]({2}),", "commodity", columnLength);
}
是否存在與以下代碼等效的LINQ表達式?替換爲LINQ的循環
int noOfColumns = 10;
for (int i = 2; i <= noOfColumns+1; i++)
{
sql.AppendFormat(" [{0}{1}] [varchar]({2}),", "commodity", columnLength);
}
試試這個,
Enumerable.Range(2, noOfColumns).ToList().ForEach(r => { sql.AppendFormat(" [{0}{1}] [varchar]({2}),", "commodity" columnLength); });
你是對的,拿掉'+ 1'修復了一個範圍錯誤,不是嗎?請接受我的道歉。我的downvote被鎖定了,但是如果你編輯了你的答案(你可以把一些linebreaks放進去!),那麼我可以刪除它。 – Rawling
@Swani:似乎這不會編譯! –
@huMptyduMpty,如果您忽略該部分,則問題本身不編譯('[{0} {1}] [varchar]({2}),「,」commodity「columnLength);')。 :) –
對於它的價值,在(編譯)LINQ的替代將是:
IEnumerable<string> cols = Enumerable.Range(2, noOfColumns +1)
.Select(i => string.Format(" [{0}] [varchar]({1})", "commodity", columnLength));
string sql = string.Join(",", cols);
但我必須承認,我不知道你在做什麼。
Enumerable.Range
的參數是start
和count
。這意味着它不會直接替換循環。
for(var i = 5; i < 8; ++i)
會產生從5號〜7
Enumerable.Range(5, 8)
將產生的數字爲5〜12(5 + 8-1)。
爲了達到預期效果,需要使用Enumerable.Range(start, end - start)
。
Flippant回答:這段代碼不能編譯。更認真的答案?可能不是性能高的一個。 – Rawling
我只是想生成動態sql來創建一個代碼後面的表。列數將在運行時更改(可能會有1000次)。作爲LINQ的新手,我認爲它可能會增加價值。謝謝你的所有時間 –
@Kiran:你對當前的代碼有任何問題嗎?爲什麼你想在'linq'中做到這一點? –