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