如何在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的值

请帮。

如何在c#中使用Linq和反射

这无法测试,因为我真的不知道你使用的是什么类型(特别是Values),也不知道预期的结果是什么。

value = listSource.Where(item => idValue.Equals(idProperty.GetValue(item, null).ToString()))
    .Select(item => nameProperty.GetValue(item, null).ToString())
    .First();

我们首先获得与您的if条件相对应的所有项目,然后通过nameProperty将它们转换为简单的字符串,然后仅检索第一个(也应该是唯一的)字符串项目。