具有列的多个可能名称的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 中 相同行的数据合并,求代码方法
【.net】datatable分组,然后分成多个表或者多个集合