Bir veri tablosunda bir sütun olup olmadığı nasıl kontrol edilir


93

Bir csv dosyasının içeriğiyle oluşturulmuş bir tarihlenebilirim var. Diğer bilgileri, csv'nin bazı sütunlarını (artık veri tablosunda) kullanıcının doldurması gereken bilgilerle eşlemek için kullanıyorum.

En iyi dünyada haritalama her zaman mümkün olacaktır. Ama bu gerçek değil ... Yani, verilebilir sütun değerini eşlemeye çalışmadan önce, bu sütunun var olup olmadığını kontrol etmem gerekir. Bunu yapmazsam bir ArgumentException var.

Elbette bunu aşağıdaki gibi bir kodla kontrol edebilirim:

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

ancak şu anda eşlenecek 3 sütunum var ve bazıları veya tümü mevcut / eksik olabilir

Datatable'da bir sütun olup olmadığını kontrol etmenin iyi bir yolu var mı?


A DataSet/ ile mi uğraşıyorsunuz DataTable? Öyleyse, tablodaki tüm sütunların bir listesi için tablonun Sütun koleksiyonuna bakabilirsiniz.
asawyer

Evet, @asawyer csv'nin içeriği bir datatable içine döküldü. Bu yönde bir göz atacağım.
Rémi

Yanıtlar:


196

Sen kullanabilirsiniz operator Contains,

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

MSDN - DataColumnCollection.Contains ()


bunun linq olduğundan emin misin? Benim kodunda linq dair her türlü ifade ve bu işi yok
Rémi

sütunların basit operatörü
Aghilas Yakoub

Bu bir linq genişletme yöntemi değil, DataColumnCollection türünün bir üyesidir, ancak aynı zamanda iyi çalışır.
asawyer

5
@AghilasYakoub Tabii ki, onu unuttum. Muhtemelen bu durumda da gitmenin daha iyi yolu. Yine de bir şey, "İçerir operatörünü kullanabilirsiniz" - Bu bir operatör değil, bir üye yöntemi.
asawyer


8

Birden çok sütun için, aşağıda verilene benzer bir kod kullanabilirsiniz.

 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
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.