E 'possibile determinare la posizione corrente quando l'iterazione di un ICollection?
-
11-10-2019 - |
Domanda
Ho il seguente codice:
foreach(string reelid in unValidatedFeedersOnMachine.Keys)
{
_sqlString.Append("CompID = '").Append(reelid).Append("' ");
}
ho bisogno di aggiungere in questo ciclo ad ogni iterazione .Appened("or ")
tranne l'ultimo.
Qualsiasi idea di come posso sapere quando I Situata sulla parte ultima iterazione qui?
Soluzione
lo farei il contrario - trattare il primo come l'eccezione è più semplice:
bool first = true;
foreach(string reelid in unValidatedFeedersOnMachine.Keys)
{
if(first) {first = false;}
else {_sqlString.Append(" or ";}
_sqlString.Append("CompID = '").Append(reelid).Append("' ");
}
o in .NET 4.0 solo uso:
string s = string.Join(" or ",
from key in unValidatedFeedersOnMachine.Keys
select "CompID = '" + reelid + "'");
o, meglio ancora, se questo è SQL - interruttore per IN
...
string s = "CompID IN (" + string.Join(","
from key in unValidatedFeedersOnMachine.Keys
select "'" + reelid + "'") + ")";
Altri suggerimenti
Che dire di fare tutto in una sola riga?
string query = string.Join(" or ", unValidatedFeedersOnMachine.Keys.Select(x => "CompID = '" + x + "'").ToArray())
P.S.
Se sei targeting .net 4.0, è possibile saltare la .ToArray()
Io tendo a fare questo
var _sqlString = new StringBuilder();
foreach(string reelid in unValidatedFeedersOnMachine.Keys) {
if(_sqlString.ToString().Length != 0) {
_sqlString.Appened(" or ")
}
_sqlString.Append("CompID = '").Append(reelid).Append("' ");
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow