Итак, я работаю со старой моделью данных, и мне приходится работать с тем, что я ' был вручен.
Когда я выполняю запрос к базе данных, модель возвращает данные в виде
List<Dictionary<string, object>>
, где для каждого словаря ключом является имя столбца, а значением - значение столбца. Как вы понимаете, работа с этим - кошмар циклов foreach и приведения типов
. Я надеюсь определить некоторые модели представления POCO, а затем создать что-то, что использует LINQ / отражение и «карту привязки присваивания», чтобы уйти от ужасного вернуть значение моему красивому чистому POCO. Таким образом, я мог определить «сопоставления» с именами столбцов и лямбда-выражениями свойств в моем POCO, аналогично этому ...
var Map; // type???
Map.Add("Id", p => p.Id);
Map.Add("Code", p => p.Code);
Map.Add("Description", p => p.Description);
Map.Add("Active", p => p.Active);
Затем преобразовать следующим образом ...
List<Dictionary<string, object>> Results = MyModel.Query(...);
List<ProductViewModel> POCOs = new List<ProductViewModel>();
foreach (var Result in Results) // Foreach row
{
ProductViewModel POCO = new ProductViewModel();
foreach (var i in Result) // Foreach column in this row
{
// This is where I need help.
// i.Key is the string name of my column.
// I can get the lambda for this property from my map using this column name.
// For example, need to assign to POCO.Id using the lambda expression p => p.Id
// Or, assign to POCO.Code using the lambda expression p => p.Code
}
POCOs.Add(POCO);
}
return POCOs;
Можно ли это сделать с помощью какого-то отражения, и если да, то как?