How do I know which is the last element in a list?

7

I am doing a dynamic sql query, in which I use lists, my problem is, how to know which last element of this list

Follow the code you have made so far:

List<string> campos = new List<string>();

campos.Add("id");
campos.Add("descricao");
campos.Add("Titulo");

string sql = "INSERT INTO teste( ";

foreach (string campo in campos)
{
   sql += campo + ", ";//preciso saber o ultimo elemento para fechar o parênteses ao invés da vírgula
}
    
asked by anonymous 25.06.2015 / 15:42

6 answers

10

You do not need to know the last item on the list. After foreach takes the string and do this:

//Remove a virgula e adiciona o parêntesis
sql = sql.TrimEnd(',') + ")";

String.TrimEnd

    
25.06.2015 / 16:32
5

You can use string.Join to do this .

List<string> campos = new List<string>();

campos.Add("id");
campos.Add("descricao");
campos.Add("Titulo");

string sql = "INSERT INTO teste(" + string.Join(",", campos) + ")";

Check the example in DotNetFiddle

    
08.07.2015 / 00:06
4

One more way:

var sql = "INSERT INTO teste( " + campos[0];
for(var i = 1; i < campos.Count; i++) {
    sql +=  ", " + campos[i];
}

Or the solution I do not like to use flag but uses foreach :

var primeiro = true;
foreach (var campo in campos) {
    sql += (primeiro ? ", " : "") + campo;
    primeiro = false;
}

There are several other ways.

    
07.07.2015 / 06:24
2
List<string> campos = new List<string>();
campos.Add("id");
campos.Add("descricao");
campos.Add("Titulo");
string sql = "INSERT INTO teste( ";
foreach (string campo in campos)
   sql += campo + ", ";

sql = sql.Substring(0, sql.Length - 2);
    
25.06.2015 / 16:11
1

I believe that using for in place of foreach would be easier

  

I do not know enough about the language so I do not know if it's fields.size () or fields.length () or fields.Count

List<string> campos = new List<string>();

campos.Add("id");
campos.Add("descricao");
campos.Add("Titulo");

string sql = "INSERT INTO teste( ";
int quantidade = campos.Count;
for(int i = 0; i < quantidade; i++)
{
   string campo = campos[i];
   if((quantidade  - 1) == i) {
       sql += campo + ") ";// é o ultimo
   } else {
       sql += campo + ", ";// Não é o ultimo
   }
}
    
25.06.2015 / 15:56
1
...
string ultimoItem = "";

//verificando se há itens na lista para evitar possíveis erros
if (campos.Count > 0) {
    ultimoItem = campos[campos.Count - 1];
}
    
07.07.2015 / 08:28