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?

È stato utile?

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
scroll top