Bagaimana cara memeriksa apakah kolom ada di datatable

93

Saya memiliki data yang dihasilkan dengan konten file csv. Saya menggunakan informasi lain untuk memetakan beberapa kolom csv (sekarang dalam datatable) ke informasi yang harus diisi oleh pengguna.

Di dunia terbaik, pemetaan akan selalu memungkinkan. Tapi ini bukan kenyataan ... Jadi sebelum saya mencoba memetakan nilai kolom yang dapat didata, saya perlu memeriksa apakah kolom itu ada. Jika saya tidak melakukan pemeriksaan ini, saya memiliki ArgumentException.

Tentu saja saya bisa mengeceknya dengan beberapa kode seperti ini:

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

tetapi saya sekarang memiliki 3 kolom untuk dipetakan dan beberapa atau semua mungkin ada / hilang

Apakah ada cara yang baik untuk memeriksa apakah ada kolom di datatable?

Rémi
sumber
Apakah Anda berurusan dengan DataSet/ DataTable? Jika demikian, Anda dapat melihat koleksi Kolom tabel untuk daftar semua kolom dalam tabel.
asawyer
Ya, @asawyer konten csv dibuang di sebuah datatable. Saya akan melihat ke arah ini.
Rémi

Jawaban:

196

Anda bisa menggunakan operator Contains,

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

MSDN - DataColumnCollection.Contains ()

Aghilas Yakoub
sumber
apakah kamu yakin ini linq? Saya tidak memiliki referensi ke LINQ dalam kode saya dan pekerjaan ini
Rémi
itu operator sederhana kolom
Aghilas Yakoub
Ini bukan metode ekstensi linq, melainkan anggota tipe DataColumnCollection, tetapi juga akan bekerja dengan baik.
pengacara
5
@AghilasYakoub Tentu saja, saya lupa tentang yang itu. Mungkin cara yang lebih baik untuk menangani kasus ini juga. Satu hal, "Anda dapat menggunakan operator Berisi" - Ini bukan operator, ini adalah metode anggota.
asawyer
75
myDataTable.Columns.Contains("col_name")
adinas
sumber
8

Untuk beberapa kolom Anda dapat menggunakan kode yang mirip dengan yang diberikan di bawah ini. Saya baru saja membahas ini dan menemukan jawaban untuk memeriksa beberapa kolom di Datatable.

 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
sumber
0

Anda dapat melihat Columnsproperti yang diberikan DataTable, itu adalah daftar semua kolom dalam tabel.

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

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

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