如何将DataTable转换为Dynamic对象? [英] How can I convert a DataTable into a Dynamic object?
本文介绍了如何将DataTable转换为Dynamic对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何将 DataTable
转换为 IEnumerable< dynamicObject>
?
例如,我想转换任何 DataTable
ID | Name DI | emaN
--------- or ---------
1 | x 2 | x
2 | y 1 | y
在对象列表中
// list 1 (ex 1) // list 2 (ex 2)
{ {
{ ID = 1, Name = "x" } { DI = 2, emaN = "x" }
{ ID = 2, Name = "y" } { DI = 1, emaN = "y" }
} }
所以
list1.First().ID // 1
list2.First().emaN // "x"
我这样做?
推荐答案
如何使用 DynamicObject
:
public static class DataTableX
{
public static IEnumerable<dynamic> AsDynamicEnumerable(this DataTable table)
{
// Validate argument here..
return table.AsEnumerable().Select(row => new DynamicRow(row));
}
private sealed class DynamicRow : DynamicObject
{
private readonly DataRow _row;
internal DynamicRow(DataRow row) { _row = row; }
// Interprets a member-access as an indexer-access on the
// contained DataRow.
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
var retVal = _row.Table.Columns.Contains(binder.Name);
result = retVal ? _row[binder.Name] : null;
return retVal;
}
}
}
您还可以尝试覆盖 TrySetMember
如果您想使动态行可写。
You could also try overriding TrySetMember
if you wish to make the dynamic-row writable.
用法:
DataTable table = ...
var dynamicTable = table.AsDynamicEnumerable();
var firstRowsNameField = dynamicTable.First().Name;
这篇关于如何将DataTable转换为Dynamic对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文