использование автоматического преобразователя для сопоставления данных, возвращаемых средством чтения данных, с типами c в C# - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть следующий метод в моей программе, который выбирает данные из другой таблицы в моей базе данных. Что мне нужно сделать, это сопоставить данные в другой коллекции в зависимости от входного запроса. Каждый запрос будет ориентирован на данные из другой таблицы. Детали таблицы не имеют значения, и комментарий, который мне нужен, в основном связан с тем, как настроить 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;
}

Мое решение этого с использованием 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><,>));

}

Мне не удалось запустить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...