具有列的多个可能名称的DataTable

时间:2018-03-01 11:46:29

标签: c# datatable

从Datatable和列名导入数据可能有多个名称值,例如。该列可能被称为“名称”,或者可以称为“名字”或“F名称”

是否有更有效的方法,然后做很多If else's来分配列的值

目前我所拥有的是

   foreach (DataRow item in datatable.Rows)
            {
                var csvEmployee = new CsvEmployee();

                if(datatable.Columns.Contains("Name"))
                    csvEmployee.FirstName = item["Name"].ToString();
                else if (datatable.Columns.Contains("First Name"))
                    csvEmployee.FirstName = item["First Name"].ToString();
                else if (datatable.Columns.Contains("F Name"))
                    csvEmployee.FirstName = item["F Name"].ToString();
            }

3 个答案:

答案 0 :(得分:2)

在FOR语句之前检查您的列被调用的内容(通过Columns.Contains),将其分配给变量并在循环中使用它。顺便说一句:尽量不要使用ToString方法。

        string columnName = null;
        if (datatable.Columns.Contains("Name"))
            columnName = "Name";
        else if (datatable.Columns.Contains("First Name"))
            columnName = "First Name";
        else if (datatable.Columns.Contains("F Name"))
            columnName = "F Name";
       if (columnName == null)
            return;
        foreach (DataRow item in datatable.Rows)
        {
            var csvEmployee = new CsvEmployee();
            csvEmployee.FirstName = item[columnName].ToString();
        }

答案 1 :(得分:1)

string[] firstnames = new String[] { "Name", "First Name", "F Name" } //Add more if u want

foreach (string x in firstnames)
    {
        if (datatable.Columns.Contains(x)) csvEmployee.FirstName = item[x];
    }

答案 2 :(得分:1)

您可以使用三元运算符替换if / else if,但可读性不是最好的。

在循环之前执行此操作:

var columns = datatable.Columns;
var columnName = columns.Contains("Name") ? "Name" 
                  : columns.Contains("First Name") ? "First Name" 
                          : columns.Contains("F Name") ? "F Name" : null;
if (columnName == null) return; // assuming the containing method returns void

然后在循环中,只需执行:

csvEmployee.FirstName = item[columnName].ToString();

如果包含方法没有返回void,则不按照上面的建议执行if (columnName == null) return;,而是可以执行只执行循环的null检查当columnName不是null时。