c# vb net - Procedura consigliata per verificare se DataRow contiene una determinata colonna




2 Answers

È possibile creare un metodo di estensione per renderlo più pulito:

static class DataRowExtensions
{
    public static object GetValue(this DataRow row, string column)
    {
        return row.Table.Columns.Contains(column) ? row[column] : null;
    }
}

Ora chiamalo come di seguito:

foreach(DataRow row in table)
    return yield new Thingy { Name = row.GetValue("hazaa") };
leggere dataset

Al momento, quando eseguo un'iterazione sulle istanze DataRow , lo faccio.

foreach(DataRow row in table)
  return yield new Thingy { Name = row["hazaa"] };

Prima o poi (cioè prima), farò mancare al tavolo l' asino della colonna e la cacca colpirà il ventaglio. Dopo alcune ricerche approfondite su google (circa 30 secondi) ho scoperto la seguente sintassi di protezione.

foreach(DataRow row in table)
  if(row.Table.Columns.Contains("donkey"))
    return yield new Thingy { Name = row["hazaa"] };
  else
    return null;

Ora - questa è la sintassi più semplice ?! Veramente? Mi aspettavo un metodo che mi mettesse in campo se esistesse o nullo altrimenti. O almeno un metodo Contiene direttamente sulla riga .

Mi sto perdendo qualcosa? In questo modo mapperò in molti campi in modo che il codice risulti terribilmente illeggibile ...




foreach (DataColumn item in row.Table.Columns)
{
    switch (item.ColumnName)
    {
        case "ID":
            {
                p.ID = Convert.ToInt32(row[item.ColumnName].ToString());
            }
            break;
        case "firstName":
            {
                p.firstName = row[item.ColumnName].ToString();
            }
            break;
        case "lastName":
            {
                p.lastName = row[item.ColumnName].ToString();
            }
            break;

        default:
            break;
    };
}



Related


Tags

c#   dataset