Можно ли определить текущую позицию при итерации ICollection? - PullRequest
2 голосов
/ 17 января 2011

У меня есть следующий код:

foreach(string reelid in unValidatedFeedersOnMachine.Keys)
{
    _sqlString.Append("CompID = '").Append(reelid).Append("' ");
}

Мне нужно добавить в этот цикл на каждой итерации .Appened("or "), кроме последней.

Любая идея, как я могу знать, когда янаходится на последней итерации здесь?

Ответы [ 3 ]

5 голосов
/ 17 января 2011

Я бы сделал это наоборот - трактовав первое как исключение проще:

bool first = true;
foreach(string reelid in unValidatedFeedersOnMachine.Keys)
{
   if(first) {first = false;}
   else {_sqlString.Append(" or ";}
    _sqlString.Append("CompID = '").Append(reelid).Append("' ");
}

или в .NET 4.0 просто используйте:

string s = string.Join(" or ",
           from key in unValidatedFeedersOnMachine.Keys
           select "CompID = '" + reelid + "'");

или даже лучше, если это SQL - переключитесь на IN ...

string s = "CompID IN (" + string.Join(","
           from key in unValidatedFeedersOnMachine.Keys
           select "'" + reelid + "'") + ")";
4 голосов
/ 17 января 2011

Как насчет того, чтобы делать все в одной строке?

string query = string.Join(" or ", unValidatedFeedersOnMachine.Keys.Select(x => "CompID = '" + x + "'").ToArray())

приписка
Если вы ориентируетесь на .net 4.0, вы можете пропустить .ToArray()

0 голосов
/ 17 января 2011

Я склонен делать это

var _sqlString = new StringBuilder();
foreach(string reelid in unValidatedFeedersOnMachine.Keys) {                     
    if(_sqlString.ToString().Length != 0) {
        _sqlString.Appened(" or ")
    }
    _sqlString.Append("CompID = '").Append(reelid).Append("' ");
}
...