修改一个对象的多个字段值

本文关键字:字段 一个对象 修改 | 更新日期: 2023-09-27 18:06:04

我有一个对象集合(比如Products),我想更改集合中每个对象的一些字段值。我想定义字段名及其对应的值,如下所示

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 ??
                    )
        }
    }

假设Product Object如下所示

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

修改一个对象的多个字段值

您可以使用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));
    }
}