Я пытался придумать 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);
}
}
}