如何在c#中使用Linq和反射
本文关键字:Linq 反射 | 更新日期: 2023-09-27 18:14:43
使用可枚举对象的反射从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
的值
请帮。
这无法测试,因为我真的不知道你使用的是什么类型(特别是Values
),也不知道预期的结果是什么。
value = listSource.Where(item => idValue.Equals(idProperty.GetValue(item, null).ToString()))
.Select(item => nameProperty.GetValue(item, null).ToString())
.First();
我们首先获得与您的if
条件相对应的所有项目,然后通过nameProperty
将它们转换为简单的字符串,然后仅检索第一个(也应该是唯一的)字符串项目。