C#创建具有动态属性的对象:LINQ选择List< object>属性名称数组的值 [英] C# Create object with dynamic properties : LINQ select List<object> values by property names array
本文介绍了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< object>属性名称数组的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文