gpt4 book ai didi

c# - 值注入(inject)器和数据表

转载 作者:太空狗 更新时间:2023-10-29 17:54:11 28 4
gpt4 key购买 nike

我试图找出 ValueInjecter,以便我可以在我们自己开发的小 ORM 中使用它。因为我应该支持 DataRow 和 DataTable 映射,所以我正在尝试为这种类型实现映射器。老实说,文档还不够好,我想试一试。也许 Omu 或这个图书馆的其他一些用户会回答。

这是我的 DataRow 注入(inject)器

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不会创建新对象,它会将值注入(inject)现有对象。

所以你将拥有:

var list = new List<T>();
list.InjectFrom<MyFromDataTableInj>(dataTable)

实际上,在您的情况下,您将仅使用从 DataTable 到 IList<T> 的注入(inject)所以你可以这样做:

   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):

关于c# - 值注入(inject)器和数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5462671/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com