ValueInjecter和DataTable

我试图找出ValueInjecter,所以我可以在我们自己种植的小ORM中使用它。由于我应该支持DataRow和DataTable映射,我正在尝试为这种类型实现映射器。老实说,文档不够好,我想给它一个机会。也许Omu或该图书馆的其他一些用户会回答。 这是我的DataRow注入器
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。我期望做的代码片段就像。
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的帮助写的完整代码
 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);
            }
        }
    }
    
已邀请:
DataRow
一样,你现在只需使用
KnownSourceValueInjection<DataTable>
。 另外你可以看到
Inject
方法是
void
所以你不会返回任何你只是改变目标对象(已经存在)的东西。 请记住,
InjectFrom
不会创建新对象,而是将值注入现有对象。 所以你将会:
var list = new List<T>();
list.InjectFrom<MyFromDataTableInj>(dataTable)
实际上,在您的情况下,您将仅使用从DataTable到ѭ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>;
... 
        }
    }
用法:
list.InjectFrom<My<Foo>>(datatable):
    

要回复问题请先登录注册