如何在C#中使用Linq with Reflection?

时间:2016-10-24 13:30:58

标签: 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");
    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

的值

请帮忙。

1 个答案:

答案 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>