如何在C#中使用带反射的Linq?
使用枚举的反射从id获取名称。我正在使用:如何在C#中使用带反射的Linq?,c#,linq,reflection,C#,Linq,Reflection,使用枚举的反射从id获取名称。我正在使用: foreach(string idValue in Values) { var listSource = itemsSource as IEnumerable; Type listType = listSource.GetType().GenericTypeArguments[0] PropertyInfo idProperty = listType.GetType().GetProperty("Id"); Proper
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。选择(x=>x.idProperty==idValue)
并使用它获取nameProperty的值
请帮助。这无法测试,因为我真的不知道您使用的是什么类型(特别是值),也不知道预期结果是什么
value = listSource.Where(item => idValue.Equals(idProperty.GetValue(item, null).ToString()))
.Select(item => nameProperty.GetValue(item, null).ToString())
.First();
我们首先获取与您的if
条件对应的所有项,然后通过nameProperty
将它们转换为简单字符串,然后仅检索第一个(也应该是唯一的)字符串项。使用LINQ不会避免循环,这只是意味着你不需要写出来。@Botonomous你会惊讶于有这么多人认为Linq更快,因为通过某种魔法,它不必迭代所有的项。我很困惑-如果你知道属性名,为什么要使用反射?你怎么能在外部引用listItem
您的代码在没有其他上下文的情况下不会按原样编译,因此很难准确理解您使用反射的原因、您尝试执行的操作以及您遇到的问题。您是否在列表源
中查找在值
中具有Id
值的项目?感谢您的回复。问题是,即使在使用System.Linq之后,我也无法使用.Where或Linq。这可能是因为IEnumerable类型目前还不知道。显然,您在自己的代码中使用了IEnumerable
,所以这不是问题所在。你的错误是什么?