C# 使用automapper将数据读取器返回的数据映射到C中的泛型类型#

C# 使用automapper将数据读取器返回的数据映射到C中的泛型类型#,c#,generics,automapper,C#,Generics,Automapper,我的程序中有以下方法,可以从数据库中的不同表中获取数据。我需要做的是根据输入查询映射不同集合中的数据。每个查询将以不同表中的数据为目标。表的细节是不相关的,我需要的注释主要与如何配置autompapper来实现这一点有关 我的初始代码如下所述: private async Task<List<List<KeyValuePair<string, string>>>> LoadData(SqlConnection conn) { List

我的程序中有以下方法,可以从数据库中的不同表中获取数据。我需要做的是根据输入查询映射不同集合中的数据。每个查询将以不同表中的数据为目标。表的细节是不相关的,我需要的注释主要与如何配置autompapper来实现这一点有关

我的初始代码如下所述:

   private async Task<List<List<KeyValuePair<string, string>>>> LoadData(SqlConnection conn)
{
    List<string> columnNames = new List<string>();
    string sql = QueryForTheData;
    List<List<KeyValuePair<string, string>>> result = new List<List<KeyValuePair<string, string>>>();
    var reader = await new SqlCommand(sql, conn).ExecuteReaderAsync();

    for (int i = 0; i < reader.FieldCount; i++)
    {
        columnNames.Add(reader.GetName(i));
    }

    while (reader.Read())
    {
        List<KeyValuePair<string, string>> FoundRecords = new List<KeyValuePair<string, string>>();
        foreach (var columnName in columnNames)
        {
            FoundRecords.Add(new KeyValuePair<string, string>(key: columnName, value: reader[columnName].ToString()));
        }
        result.Add(FoundRecords;
    }
    return result;
}
专用异步任务加载数据(SqlConnection conn)
{
List columnNames=新列表();
字符串sql=QueryForTheData;
列表结果=新列表();
var reader=wait new SqlCommand(sql,conn.ExecuteReaderAsync();
对于(int i=0;i
我使用Automapper对此的解决方案如下:

 private async Task<List<TResult>> LoadData<TResult>(SqlConnection conn)
{
    List<string> columnNames = new List<string>();
    string sql = QueryForDuplicatesChecking;
    List<List<KeyValuePair<string, string>>> result = new List<List<KeyValuePair<string, string>>>();
    var reader = await new SqlCommand(sql, conn).ExecuteReaderAsync();

    for (int i = 0; i < reader.FieldCount; i++)
    {
        columnNames.Add(reader.GetName(i));
    }

    while (reader.Read())
    {
        List<KeyValuePair<string, string>> FoundRecords = new List<KeyValuePair<string, string>>();
        foreach (var columnName in columnNames)
        {
            FoundRecords.Add(new KeyValuePair<string, string>(key: columnName, value: reader[columnName].ToString()));
        }
        result.Add(FoundRecords);
    }
    return Mapper.CreateMap(typeof(List<List<KeyValuePair<string, string>>><,>), typeof(List<TResult><,>));

}
专用异步任务加载数据(SqlConnection conn)
{
List columnNames=新列表();
字符串sql=QueryForDuplicatesChecking;
列表结果=新列表();
var reader=wait new SqlCommand(sql,conn.ExecuteReaderAsync();
对于(int i=0;i

我没有成功地运行它。

谢谢你的链接。我还没有看到任何泛型类型映射。为什么不简单地使用DataTable,这是泛型的,对吗?@LucianBargaoanu,这确实是一个很好的建议。我之所以使用custum类型是为了避免以非类型安全的方式从DataTable读取数据的提取工作。