创建具有动态属性的对象值按属性名称数组

本文关键字:属性 数组 动态 创建 对象 | 更新日期: 2023-09-27 18:10:14

class OriginalObject
        {
            public string str1  {get;set;}
            public string str2 { get; set; }
            public string str3 { get; set; }
            public string str4 { get; set; }
        }
        class Program
        {
            static void Main(string[] args)
            {           
                List<OriginalObject> obj = new List<OriginalObject>();
                obj.Add(new OriginalObject()
                {
                    str1 ="hi",
                    str2 = "hello",
                    str3 = "how",
                    str4 = "r u"
                });
                obj.Add(new OriginalObject()
                {
                    str1 = "i",
                    str2 = "am",
                    str3 = "fine",
                    str4 = "great"
                });
                var PropertyNames = new[] { "str1","str4"};
             //var result = Select from obj only column names that present in PropertyName Array 
                // Expected
                //obj --->
                //          {str1 = "hi",str4="r u"}
                //          {str1 = "i",str4="great"}

            }
        }   

创建具有动态属性的对象值按属性名称数组

你可以这样做:

var properties = typeof(OriginalObject).GetProperties()
                                       .Where(p => PropertyNames.Contains(p.Name))
                                       .ToList();
var output = obj.Select(o => {
    dynamic x = new ExpandoObject();
    var temp = x as IDictionary<string, Object>;
    foreach(var property in properties)
        temp.Add(property.Name, property.GetValue(o));
    return x;
});
倾销的结果:

foreach(dynamic x in output)
{
    Console.WriteLine(x.str1);
    Console.WriteLine(x.str4);
}

试试这个

var result = obj.Select(x => new 
             { 
                  x.str1, 
                  x.str4 
             }).ToList();