วิธีตรวจสอบว่ามีคอลัมน์อยู่ใน datatable หรือไม่


93

ฉันมี datable ที่สร้างขึ้นด้วยเนื้อหาของไฟล์ csv ฉันใช้ข้อมูลอื่นเพื่อแมปคอลัมน์บางคอลัมน์ของ csv (ตอนนี้อยู่ใน datatable) กับข้อมูลที่ผู้ใช้ต้องกรอก

ในโลกที่ดีที่สุดการทำแผนที่จะเป็นไปได้ แต่นี่ไม่ใช่ความจริง ... ดังนั้นก่อนที่ฉันจะพยายามแมปค่าคอลัมน์ที่สามารถระบุข้อมูลได้ฉันจะต้องตรวจสอบว่ามีคอลัมน์นั้นหรือไม่ หากฉันไม่ทำการตรวจสอบนี้แสดงว่าฉันมี ArgumentException

แน่นอนฉันสามารถตรวจสอบสิ่งนี้ด้วยรหัสบางอย่างเช่นนี้:

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

แต่ตอนนี้ฉันมี 3 คอลัมน์ในการแมปและบางส่วนหรือทั้งหมดอาจมีอยู่ / ขาดหายไป

มีวิธีที่ดีในการตรวจสอบว่ามีคอลัมน์อยู่ใน datatable หรือไม่?


คุณกำลังจัดการกับDataSet/ DataTableหรือไม่? ในกรณีนี้คุณสามารถดูคอลเลกชันคอลัมน์ของตารางเพื่อดูรายการคอลัมน์ทั้งหมดในตาราง
asawyer

ใช่ @asawyer เนื้อหาของ csv ถูกทิ้งใน datatable ฉันจะมองไปในทิศทางนี้
Rémi

คำตอบ:


196

คุณสามารถใช้operator Contains,

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

MSDN - DataColumnCollection.Contains ()


แน่ใจหรือว่านี่คือ linq ฉันไม่มีการอ้างอิงถึง linq ในรหัสของฉันและงานนี้
Rémi

มันง่ายต่อการดำเนินการของคอลัมน์
Aghilas Yakoub

นี่ไม่ใช่วิธีการขยาย linq แต่เป็นสมาชิกของประเภท DataColumnCollection แต่ก็ใช้ได้ดีเช่นกัน
asawyer

5
@AghilasYakoub แน่นอนว่าฉันลืมเรื่องนั้นไปแล้ว น่าจะเป็นวิธีที่ดีกว่าในกรณีนี้เช่นกัน สิ่งหนึ่งที่ "คุณสามารถใช้ตัวดำเนินการประกอบด้วย" - ไม่ใช่ตัวดำเนินการ แต่เป็นวิธีการของสมาชิก
asawyer


8

สำหรับหลายคอลัมน์คุณสามารถใช้รหัสที่คล้ายกับที่ระบุด้านล่างฉันเพิ่งทำสิ่งนี้และพบคำตอบเพื่อตรวจสอบหลายคอลัมน์ใน 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

คุณสามารถดูColumnsคุณสมบัติของรายการที่กำหนดDataTableซึ่งเป็นรายการคอลัมน์ทั้งหมดในตาราง

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


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.