¿Es posible determinar la posición actual cuando se repite un ICollection?
-
11-10-2019 - |
Pregunta
Tengo el siguiente código:
foreach(string reelid in unValidatedFeedersOnMachine.Keys)
{
_sqlString.Append("CompID = '").Append(reelid).Append("' ");
}
Tengo que añadir que en bucle en cada iteración .Appened("or ")
excepto la última.
alguna idea de cómo puede saber cuando se encuentra en la última iteración aquí?
Solución
lo haría al revés - el tratamiento de la primera como la excepción es más simple:
bool first = true;
foreach(string reelid in unValidatedFeedersOnMachine.Keys)
{
if(first) {first = false;}
else {_sqlString.Append(" or ";}
_sqlString.Append("CompID = '").Append(reelid).Append("' ");
}
o en .NET 4.0 solo uso:
string s = string.Join(" or ",
from key in unValidatedFeedersOnMachine.Keys
select "CompID = '" + reelid + "'");
o, mejor aún, si se trata de SQL - cambiar a IN
...
string s = "CompID IN (" + string.Join(","
from key in unValidatedFeedersOnMachine.Keys
select "'" + reelid + "'") + ")";
Otros consejos
Lo que trata de hacer todo en una línea?
string query = string.Join(" or ", unValidatedFeedersOnMachine.Keys.Select(x => "CompID = '" + x + "'").ToArray())
P.S.
Si usted está apuntando .NET 4.0, puede omitir la .ToArray()
tiendo a hacer esto
var _sqlString = new StringBuilder();
foreach(string reelid in unValidatedFeedersOnMachine.Keys) {
if(_sqlString.ToString().Length != 0) {
_sqlString.Appened(" or ")
}
_sqlString.Append("CompID = '").Append(reelid).Append("' ");
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow