Est-il possible de déterminer la position actuelle quand itérer ICollection?
-
11-10-2019 - |
Question
Je le code suivant:
foreach(string reelid in unValidatedFeedersOnMachine.Keys)
{
_sqlString.Append("CompID = '").Append(reelid).Append("' ");
}
Je dois ajouter dans cette boucle sur chaque .Appened("or ")
d'itération, sauf le dernier.
Toute idée de comment je peux savoir quand je situe sur la dernière itération ici?
La solution
je le ferais dans l'autre sens - le traitement de la première que l'exception est plus simple:
bool first = true;
foreach(string reelid in unValidatedFeedersOnMachine.Keys)
{
if(first) {first = false;}
else {_sqlString.Append(" or ";}
_sqlString.Append("CompID = '").Append(reelid).Append("' ");
}
ou .NET 4.0 simplement utiliser:
string s = string.Join(" or ",
from key in unValidatedFeedersOnMachine.Keys
select "CompID = '" + reelid + "'");
ou encore mieux, si cela est SQL - passer à IN
...
string s = "CompID IN (" + string.Join(","
from key in unValidatedFeedersOnMachine.Keys
select "'" + reelid + "'") + ")";
Autres conseils
Qu'en est-il de faire en une seule ligne?
string query = string.Join(" or ", unValidatedFeedersOnMachine.Keys.Select(x => "CompID = '" + x + "'").ToArray())
P.S.
Si vous ciblez .net 4.0, vous pouvez sauter le .ToArray()
J'ai tendance à faire
var _sqlString = new StringBuilder();
foreach(string reelid in unValidatedFeedersOnMachine.Keys) {
if(_sqlString.ToString().Length != 0) {
_sqlString.Appened(" or ")
}
_sqlString.Append("CompID = '").Append(reelid).Append("' ");
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow