So überprüfen Sie, ob eine Spalte in einer Datentabelle vorhanden ist

90

Ich habe eine Datendatei mit dem Inhalt einer CSV-Datei generiert. Ich verwende andere Informationen, um eine Spalte der CSV (jetzt in der Datentabelle) Informationen zuzuordnen, die der Benutzer ausfüllen muss.

In der besten Welt wäre die Kartierung immer möglich. Aber das ist nicht die Realität ... Bevor ich versuche, den datierbaren Spaltenwert zuzuordnen, müsste ich überprüfen, ob diese Spalte überhaupt existiert. Wenn ich diese Prüfung nicht durchführe, habe ich eine ArgumentException.

Natürlich kann ich das mit einem Code wie diesem überprüfen:

try
{
    //try to map here.
}
catch (ArgumentException)
{ }

aber ich habe vorerst 3 Spalten zuzuordnen und einige oder alle könnten vorhanden sein / fehlen

Gibt es eine gute Möglichkeit zu überprüfen, ob eine Spalte in einer Datentabelle vorhanden ist?

Rémi
quelle
Hast du es mit einem DataSet/ zu tun DataTable? In diesem Fall können Sie in der Spaltenauflistung der Tabelle eine Liste aller Spalten in der Tabelle anzeigen.
Asawyer
Ja, @asawyer, der Inhalt der CSV wird in einer Datentabelle gespeichert. Ich werde in diese Richtung schauen.
Rémi

Antworten:

190

Sie können verwenden operator Contains,

private void ContainColumn(string columnName, DataTable table)
{
    DataColumnCollection columns = table.Columns;        
    if (columns.Contains(columnName))
    {
       ....
    }
}

MSDN - DataColumnCollection.Contains ()

Aghilas Yakoub
quelle
Bist du sicher, dass dies Linq ist? Ich habe keinen Verweis auf linq in meinem Code und dieser Arbeit
Rémi
Es ist Operator einfach von Spalten
Aghilas Yakoub
Dies ist keine linq-Erweiterungsmethode, sondern ein Mitglied des DataColumnCollection-Typs, würde aber auch gut funktionieren.
Asawyer
5
@AghilasYakoub Sicher ist, ich habe das vergessen. Wahrscheinlich auch in diesem Fall der bessere Weg. Eines jedoch: "Sie können den Operator Contains verwenden" - Es handelt sich nicht um einen Operator, sondern um eine Member-Methode.
Asawyer
73
myDataTable.Columns.Contains("col_name")
adinas
quelle
8

Für mehrere Spalten können Sie Code verwenden, der dem unten angegebenen ähnlich ist. Ich habe dies gerade durchgearbeitet und eine Antwort gefunden, um mehrere Spalten in Datatable zu überprüfen.

 private bool IsAllColumnExist(DataTable tableNameToCheck, List<string> columnsNames)
    {
        bool iscolumnExist = true;
        try
        {
            if (null != tableNameToCheck && tableNameToCheck.Columns != null)
            {
                foreach (string columnName in columnsNames)
                {
                    if (!tableNameToCheck.Columns.Contains(columnName))
                    {
                        iscolumnExist = false;
                        break;
                    }
                }
            }
            else
            {
                iscolumnExist = false;
            }
        }            
        catch (Exception ex)
        {

        }
        return iscolumnExist;
    }
lokendra jayaswal
quelle
0

Sie können sich die ColumnsEigenschaft einer bestimmten ansehen DataTable, es ist eine Liste aller Spalten in der Tabelle.

private void PrintValues(DataTable table)
{
    foreach(DataRow row in table.Rows)
    {
        foreach(DataColumn column in table.Columns)
        {
            Console.WriteLine(row[column]);
        }
    }
}

http://msdn.microsoft.com/en-us/library/system.data.datatable.columns.aspx

asawyer
quelle
0
DataColumnCollection col = datatable.Columns;        
if (!columns.Contains("ColumnName1"))
{
   //Column1 Not Exists
}

if (columns.Contains("ColumnName2"))
{
   //Column2 Exists
}
Boopathi.Indotnet
quelle