ValueInjecter и DataTable

Я пытался придумать ValueInjecter, чтобы использовать его в нашей маленькой ORM. Поскольку я должен поддерживать сопоставление DataRow и DataTable, я пытаюсь реализовать сопоставители для этих типов. И, честно говоря, документации недостаточно, и я хотел попробовать. Возможно, Ому или другие пользователи этой библиотеки ответят.

вот мой инжектор 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?
        }
    }

Как я могу этого добиться. Возможно, Ому или другие пользователи этой библиотеки ответят.

вот мой инжектор 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?
        }
    }

Как я могу этого добиться. Возможно, Ому или другие пользователи этой библиотеки ответят.

вот мой инжектор 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?
        }
    }

Как я могу этого добиться. Спасибо

~~~~~~ вот полный код, который я написал с помощью Ому

 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);
            }
        }
    }
9
задан adt 29 March 2011 в 14:21
поделиться