C#创建具有动态属性的对象:LINQ选择List< object>属性名称数组的值 [英] C# Create object with dynamic properties : LINQ select List<object> values by property names array

查看:75
本文介绍了C#创建具有动态属性的对象:LINQ选择List< object>属性名称数组的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

这篇关于C#创建具有动态属性的对象:LINQ选择List&lt; object&gt;属性名称数组的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆