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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有列的多个可能名称的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();
            }
答案

你可以用三元运算符替换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时才执行循环。

另一答案

在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();
        }
另一答案
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];
    }

以上是关于具有列的多个可能名称的DataTable的主要内容,如果未能解决你的问题,请参考以下文章

动态列的 datatable 中 相同行的数据合并,求代码方法

更改DataTable某列的值。C#

【.net】datatable分组,然后分成多个表或者多个集合

c# 怎么更改DataTable 中某列的值?

从具有大量列的 DataTable 添加值后清空 DataGridView

具有多个条件的数据表选择