gpt4 book ai didi

C# - IDataReader 到使用泛型的对象映射

转载 作者:可可西里 更新时间:2023-11-01 09:06:00 27 4
gpt4 key购买 nike

如何使用泛型将 DataReader 对象映射到类对象?

例如我需要做以下事情:

public class Mapper<T>
{
public static List<T> MapObject(IDataReader dr)
{
List<T> objects = new List<T>();

while (dr.Read())
{
//Mapping goes here...
}

return objects;
}
}

然后我需要像下面这样调用这个类方法:

IDataReder dataReader = DBUtil.Fetchdata("SELECT * FROM Book");

List<Book> bookList = Mapper<Book>.MapObject(dataReder);

foreach (Book b in bookList)
{
Console.WriteLine(b.ID + ", " + b.BookName);
}

请注意,Mapper - 类应该能够映射由 T 表示的任何类型的对象。

最佳答案

我使用 ValueInjecter为此

我是这样做的:

 while (dr.Read())
{
var o = new User();
o.InjectFrom<DataReaderInjection>(dr);
yield return o;
}

你需要这个 ValueInjection 才能工作:

public class DataReaderInjection : KnownSourceValueInjection<IDataReader>
{
protected override void Inject(IDataReader source, object target, PropertyDescriptorCollection targetProps)
{
for (var i = 0; i < source.FieldCount; i++)
{
var activeTarget = targetProps.GetByName(source.GetName(i), true);
if (activeTarget == null) continue;

var value = source.GetValue(i);
if (value == DBNull.Value) continue;

activeTarget.SetValue(target, value);
}
}
}

关于C# - IDataReader 到使用泛型的对象映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1105549/

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