我怎么能转换一个DataTable成一个动态的对象吗? [英] How can I convert a DataTable into a Dynamic object?
本文介绍了我怎么能转换一个DataTable成一个动态的对象吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我怎么能转换数据表
在的IEnumerable< dynamicObject>
例如,我要转换的任何的数据表
ID |输入(DI)|林二汶
--------- ---------或
1 | ×2 | X
2 | Y 1 | Ÿ
在对象
<$ P列表$ p>
//列表1(前1)//列表2(前2)
{{
{ID = 1,名称=X} {DI = 2 ,林二汶=X}
{ID = 2,名称=Y} {DI = 1,林二汶=Y}
}}
所以
list1.First()。ID // 1
list2.First()。林二汶//X
如何能我这样做呢?
解决方案
如何使用的 DynamicObject
:
公共静态类DataTableX
{
公共静态的IEnumerable<动态> 。AsDynamicEnumerable(此数据表表)
{
//验证的说法在这里..
返回table.AsEnumerable()选择(行=>新建DynamicRow(行));
}
私人密封类DynamicRow:DynamicObject
{
私人只读的DataRow _row;
内部DynamicRow(DataRow的行){_row =行; }
//解释一个成员访问作为//包含在DataRow的
索引器访问。
公众覆盖布尔TryGetMember(GetMemberBinder粘结剂,out对象结果)
{
VAR retVal的= _row.Table.Columns.Contains(binder.Name);
结果= retVal的? _row [binder.Name]:空;
返回retVal的;
}
}
}
您也可以尝试重写< 。code> TrySetMember 如果您希望动态行写
用法
DataTable的表= ...
VAR dynamicTable = table.AsDynamicEnumerable();
VAR firstRowsNameField = dynamicTable.First()名称。
How can I convert a DataTable
in IEnumerable<dynamicObject>
?
For example, I want to convert any DataTable
ID | Name DI | emaN
--------- or ---------
1 | x 2 | x
2 | y 1 | y
In a list of objects
// list 1 (ex 1) // list 2 (ex 2)
{ {
{ ID = 1, Name = "x" } { DI = 2, emaN = "x" }
{ ID = 2, Name = "y" } { DI = 1, emaN = "y" }
} }
So
list1.First().ID // 1
list2.First().emaN // "x"
How can I do it?
解决方案
How about with 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;
}
}
}
You could also try overriding TrySetMember
if you wish to make the dynamic-row writable.
Usage:
DataTable table = ...
var dynamicTable = table.AsDynamicEnumerable();
var firstRowsNameField = dynamicTable.First().Name;
这篇关于我怎么能转换一个DataTable成一个动态的对象吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文