webentwicklung-frage-antwort-db.com.de

Bewährtes Verfahren zum Überprüfen, ob DataRow eine bestimmte Spalte enthält

In dem Moment, in dem ich über die DataRow Instanzen iteriere, mache ich das.

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

Früher oder später (d. H. Früher) bekomme ich das Tabelle, um die Spalte Esel zu verfehlen, und das poo schlägt den Ventilator. Nach einigem ausgiebigen googeln (ca. 30 Sekunden) habe ich die folgende Schutzsyntax entdeckt.

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

Nun - ist das die einfachste Syntax ?! "Ja wirklich?" Ich habe eine Methode erwartet, die mir das Feld gibt, wenn es existiert, oder null andernfalls. Oder zumindest eine Enthält -Methode direkt in der Zeile.

Vermisse ich etwas? Ich werde auf diese Weise in vielen Feldern Karten erstellen, damit der Code fürchterlich unlesbar aussieht ...

43

Sie können eine Erweiterungsmethode erstellen, um sie übersichtlicher zu gestalten:

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

Nennen Sie es jetzt wie folgt:

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

Da Ihre DataTable-Tabelle immer die gleichen Spalten enthält (diese werden für keine Zeile geändert), müssen Sie nur einmal nach dem Spaltennamen suchen.

if (table.Columns.Contains("donkey"))
{
    foreach ...
}
13
Heslacher
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;
    };
}
1
Driton