ValueInjecter and DataTable
我试图找出 ValueInjecter,以便我可以在我们自己开发的小 ORM 中使用它。因为我应该支持 DataRow 和 DataTable 映射,所以我正在尝试为这种类型实现映射器。老实说,文档还不够好,我想试一试。也许 Omu 或该库的其他用户会回答。
这是我的 DataRow 注入器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class DataRowInjection: KnownSourceValueInjection<DataRow> { protected override void Inject(DataRow source, object target) { for (var i = 0; i < source.ItemArray.Count(); i++) { //TODO: Read from attributes or target type var activeTarget = target.GetProps().GetByName(source.Table.Columns[i].ToString(), true); if (activeTarget == null) continue; var value = source.ItemArray[i]; if (value == DBNull.Value) continue; activeTarget.SetValue(target, value); } } } |
这很好用。所以这里的问题是我如何为 DataTable 实现它并返回 Ienumarable 或 IList。我期望做的代码片段就像。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class DataTableInjector : ????? { protected override void Inject(DataTable source, IList< T > target) where T : class { // Do My Staff foreach (var row in source.Rows) { target[i].InjectFrom<DataRowInjection>(row); } //return IList? } } |
我怎样才能做到这一点。
谢谢
~~~~~~这是我在Omu的帮助下编写的完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class DataTableInjection< T > : ValueInjection where T : new() { protected override void Inject(object source, object target) { var dt = source as DataTable; var t = target as IList< T >; foreach (DataRow dr in dt.Rows) { var t2 = new T(); t2.InjectFrom<DataRowInjection>(dr); t.Add(t2); } } } |
和你为
你也可以看到
请记住,
所以你将拥有:
1 2 |
实际上,在您的情况下,您将只使用从 DataTable 到
所以你可以这样做:
1 2 3 4 5 6 7 8 9 | public class My< T > : ValueInjection { protected override void Inject(object source, object target) { var dt = source as DataTable; var t = target as IList< T >; ... } } |
及用法:
1 | list.InjectFrom<My<Foo>>(datatable): |