2015-08-03 3 views
0

У меня есть набор объектов (например, «Продукты»), и я хочу изменить некоторые значения полей для каждого объекта в коллекции. Я хочу, чтобы определить имя поля и соответствующее значение, как показано нижеИзменение нескольких значений полей объекта

var mapData = new Dictionary<string,string>(); 
mapData.Add("Name","N"); 
mapData.Add("Category", "C"); 

для имени и категории полей значений каждого заранее заполненный объект продукта должен быть перезаписаны с N и C. Я пытался сделать это с помощью LINQ, как показано ниже и застрял.

[StepArgumentTransformation] 
    public IEnumerable<Product> TransformProductData(Table table) 
    { 
     var mapData = new Dictionary<string,string>(); 
     mapData.Add("Name","N"); 
     mapData.Add("Category", "C"); 

     foreach(var product in table.CreateSet<Product>) 
     { 
      var transformedProduct = typeof(product).GetProperties().Select 
        (
         prop => mapData.First(x => x.Key.Equals(prop.Name)) 
         // How do I assign the change the values here ?? 
        ) 
     } 

    } 

Предположим, объект продукта выглядит, как показано ниже

public class Product 
{ 
    public string Code { get; set; } 
    public string Name { get; set; } 
    public string Category { get; set; } 
    public string Amount { get; set; } 
} 

ответ

1

Вы можете использовать Linq связать свойство (от Product типа) до значения в mapData. После определения ассоциаций вы можете просто установить значение для каждого продукта на основе свойства и связанного с ним значения.

Что-то вроде этого:

[StepArgumentTransformation] 
public IEnumerable<Product> TransformProductData(Table table) 
{ 
    var mapData = new Dictionary<string,string>(); 
    mapData.Add("Name","N"); 
    mapData.Add("Category", "C"); 

    var prodProcessors = typeof(Product).GetProperties() 
     .Where(prop => mapData.ContainsKey(prop.Name)) 
     .Select(prop => new { Property = prop, Value = mapData[prop.Name]}) 
     .ToList(); 

    foreach(var product in table.CreateSet<Product>) 
    { 
     prodProcessors.ForEach(x => x.Property.SetValue(product, x.Value)); 
    } 

} 
+0

спасибо HashPsi! – Rasika

Смежные вопросы