Использование выражения LINQ для присвоения свойству объекта

Итак, я работаю со старой моделью данных, и мне приходится работать с тем, что я ' был вручен.

Когда я выполняю запрос к базе данных, модель возвращает данные в виде

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;

Можно ли это сделать с помощью какого-то отражения, и если да, то как?

9
задан Stevoman 28 November 2011 в 21:34
поделиться