目前,我正在使用:
DataTable dt = CreateDataTableInSomeWay();
List<DataRow> list = new List<DataRow>();
foreach (DataRow dr in dt.Rows)
{
list.Add(dr);
}
Run Code Online (Sandbox Code Playgroud)
有更好的/神奇的方式吗?
我正在尝试编写一个将DataTable转换为强类型对象列表的泛型方法.
我到目前为止使用的代码是......
public List<T> ImportTable<T>(String fileName, String table)
{
//Establish Connection to Access Database File
var mdbData = new ConnectToAccess(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\ACCESS\" + fileName + ".mdb;");
var tableData = new List<T>();
foreach (DataRow row in mdbData.GetData("SELECT * FROM " + table).Rows)
{
tableData.Add(ConvertRowToType<T>(row));
}
return tableData;
}
public T ConvertRowToType<T>(DataRow row)
{
//??? What is the best thing to do here ???
}
Run Code Online (Sandbox Code Playgroud)
如果任何人的建议需要更改,我不会注意这个代码.
所以假设我把这个函数称为传递类型...
public class mdbConcern
{
public Int32 ConcernId { get; set; }
public String Concern { get; …Run Code Online (Sandbox Code Playgroud) 我在这里回顾了答案:
但它们对我的特定用例没有帮助.我正在从SQL数据适配器检索DataTable,并希望将DataTable转换为List(这很容易),然后将List序列化为JSON(使用JSON.net,这很容易).
问题是我似乎必须使用List.好的,很好 - 所以我有这个代码:
DataTable result = GoMagicallyGatherSomeData();
List<DataRow> ret = new List<DataRow>();
if (result != null && result.Rows.Count > 0)
{
foreach (DataRow curr in result.Rows)
{
ret.Add(curr);
}
}
Run Code Online (Sandbox Code Playgroud)
要么
DataTable result = GoMagicallyGatherSomeData();
List<DataRow> ret = result.AsEnumerable().ToList();
Run Code Online (Sandbox Code Playgroud)
当我去序列化List时,它......不是我所期望的.
我想回来的是:
[
{
"TestId":1,
"AccountId":1,
"SomeString":"This is an updated test",
"SomeTimestamp":"2016-01-01T00:00:00Z",
"SomeDecimal":5.55
},
{
"TestId":3,
"AccountId":1,
"SomeString":"This is a third test",
"SomeTimestamp":"2016-01-01T00:00:00Z",
"SomeDecimal":5.55
},
{ ... removed for brevity ... }
]
Run Code Online (Sandbox Code Playgroud)
而我实际得到的是: …