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?


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 ()


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


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;
    }


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

if (columns.Contains("ColumnName2"))
{
   //Column2 Exists
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.