我有一個強類型的類PersonExport
。我最初得到的數據爲DataTable
並呼籲DataTable
下面的方法將其轉換爲List<PersonExport>
:如何將DataTable轉換爲列表<object>?
public static List<T> ConvertToList<T>(DataTable dt, out string message)
{
message = string.Empty;
var list = new List<T>();
try
{
var columnNames = dt.Columns.Cast<DataColumn>()
.Select(c => c.ColumnName)
.ToList();
var properties = typeof(T).GetProperties();
list = dt.AsEnumerable().Select(row =>
{
var objT = Activator.CreateInstance<T>();
foreach (var pro in properties)
{
if (columnNames.Contains(pro.Name))
{
var value = row[pro.Name];
var typeName = value.GetType().FullName;
if (typeName == "MySql.Data.Types.MySqlDateTime")
{
var mySqlDateTime = (MySqlDateTime) value;
if (mySqlDateTime.IsValidDateTime)
{
value = Convert.ToDateTime(mySqlDateTime.ToString());
pro.SetValue(objT, value, null);
}
}
else
{
pro.SetValue(objT, row.IsNull(pro.Name) ? null : value, null);
}
}
}
return objT;
}).ToList();
}
catch (Exception ex)
{
message = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
}
return list;
}
但是,一旦我開始從DataTable
返回刪除列,它不再有效,因爲在DataTable
列不匹配PersonExport
列表中的屬性。
我最終使用導出列表在這裏導出到Excel,但它不工作,因爲我已經DataTable
修改並且無法反序列化到一個List<PersonExport>
:
//Trying to get data into List<object>
List<object> persons = GetPersonExport(query, out message);
var exportData = new Dictionary<string, List<object>> { { "xldata", persons} };
//Deserialize to List<object> to export
var persons = JsonConvert.DeserializeObject<List<object>>(args["xldata"]);
上面一行剛剛返回空對象列表。
有幾件事讓我思考,但我想知道什麼可能是最好的方法。我使用EPPLUS庫將數據導出爲excel,並且可以隱藏列,所以最好是導出整個對象並隱藏不需要的列,這樣可以避免匿名類型或我可以做的仍然是獲得整個對象,但然後將其轉換爲DataTable,然後刪除列?思考?
請不要發佈所有的代碼很難在所有的問題閱讀。在沒有歷史前後的情況下問問你想要什麼。具體的問題是你的標題是足夠的。 – AuthorProxy
我的回答對你有幫助嗎? – AuthorProxy