C# LINQ Select对具有包含句点的属性名称的动态类型执行

C# LINQ Select对具有包含句点的属性名称的动态类型执行,c#,linq,select,dynamic,reflection,C#,Linq,Select,Dynamic,Reflection,我有一个列表,其中包含使用反射创建的动态类型的实例。动态类型的属性的名称包含一个句点,如HELLO.WORLD。这些属性的类型为string 我的目标是使用select使用LINQ选择这些属性 如果我尝试以下方法 var lstResult = ((IEnumerable<dynamic>)mydynamicdata).Select(d => d.HELLO.WORLD).AsEnumerable().ToList(); 以下是调试器的屏幕截图 您可以像访问字典一样访问动态:

我有一个列表,其中包含使用反射创建的动态类型的实例。动态类型的属性的名称包含一个句点,如HELLO.WORLD。这些属性的类型为string

我的目标是使用select使用LINQ选择这些属性

如果我尝试以下方法

var lstResult = ((IEnumerable<dynamic>)mydynamicdata).Select(d => d.HELLO.WORLD).AsEnumerable().ToList();
以下是调试器的屏幕截图

您可以像访问字典一样访问动态:

var lstResult = ((IEnumerable<dynamic>)mydynamicdata).Select(d => d["HELLO.WORLD"]).AsEnumerable().ToList();

如果这不起作用,这可能会有所帮助:

一种解决方案是再次使用反射来获取值

((IEnumerable<dynamic>)mydynamicdata).Select(d => GetPropValue(d,"COMO.NAME")).AsEnumerable().ToList();

但实际上,原来的问题仍然没有答案……

您能显示包含该属性的代码吗?它是从哪里来的?请不要把代码放在注释中,只需要你的问题。一个问题。你确定它不是HELLOWORLD属性吗?因为HELLO.WORLD将是另一种必须具有WORLD属性的类型。或者这只是一个例子?你能告诉我你从哪里得到一个这样名字的对象吗?在C.DavidG中不可能做到这一点-是的,我也认为不可能有这样的财产。我还将发布一个屏幕截图…不适用于您的解决方案。{无法将[]索引应用于“BindableRow”类型的表达式}
((IEnumerable<dynamic>)mydynamicdata).Select(d => GetPropValue(d,"COMO.NAME")).AsEnumerable().ToList();
   public static object GetPropValue(object src, string propName)
    {
        return src.GetType().GetProperty(propName).GetValue(src, null);
    }