使用可枚举的反射从id获取名称。我正在使用:
foreach(string idValue in Values)
{
var listSource = itemsSource as IEnumerable;
Type listType = listSource.GetType().GenericTypeArguments[0]
PropertyInfo idProperty = listType.GetType().GetProperty("Id");
PropertyInfo nameProperty = listType.GetType().GetProperty("Name");
foreach (var listItem in listSource)
{
if (idValue.Equals(idProperty.GetValue(listItem, null).ToString()))
{
value = nameProperty.GetValue(listItem, null).ToString();
break;
}
}
//do something with value.
}
如何使用Linq进行反射,这样我就不需要在外部循环中循环遍历'idValue'的每个值的元素了?
类似的东西:
reflectionList.Select(x=> x.idProperty == idValue)
并使用它来获取nameProperty
请帮忙。
答案 0 :(得分:0)
这无法测试,因为我不知道你正在使用什么类型(具体为Values
),也不知道预期结果是什么。
value = listSource.Where(item => idValue.Equals(idProperty.GetValue(item, null).ToString()))
.Select(item => nameProperty.GetValue(item, null).ToString())
.First();
我们首先获取与您的if
条件相对应的所有项目,然后将它们翻译为nameProperty
的简单字符串,然后仅检索第一个(也应该是唯一的)字符串项。< / p>