有关“选择”中Linq和动态对象属性的帮助

有关“选择”中Linq和动态对象属性的帮助,linq,dynamic,Linq,Dynamic,Linq newb警报将发出相当大的声音,可能还有一般的newb警报,但我不得不问这个问题,因为它让我发疯。我有一个对象MyObject,它有一些属性,例如ID、Number。有比2更多的属性,但是你知道了 我有这些对象的通用列表。从这个列表中,我需要根据MyObject的动态设置属性生成一个子集项。因此,与其 Dim lst as New List(Of MyObject) ... code to populate list ... Dim newlist = (From o In lst S

Linq newb警报将发出相当大的声音,可能还有一般的newb警报,但我不得不问这个问题,因为它让我发疯。我有一个对象MyObject,它有一些属性,例如ID、Number。有比2更多的属性,但是你知道了

我有这些对象的通用列表。从这个列表中,我需要根据MyObject的动态设置属性生成一个子集项。因此,与其

Dim lst as New List(Of MyObject)
... code to populate list ...
Dim newlist = (From o In lst Select o.Number Distinct).ToList()
我希望有一些东西允许我在select中动态查询对象的属性,例如

Dim lst as New List(Of MyObject)
... code to populate list ...
Dim newlist = (From o In lst Select o.GetType().GetProperty("Number").Name Distinct).ToList()
显然,上面的方法不起作用,因为它只返回属性名的单个项列表。是否有一种相对简单的方法可以在Linq语句中动态选择对象属性

任何和所有的帮助都将不胜感激。 谢谢

试试这个:

o.GetType().GetProperty("Number").GetValue(o)

…在您的Select子句中。

顺便说一句,您的解决方案(以及我对您的解决方案的编辑)确实使用了反射,并且很可能不是最好的方法。这非常有效,谢谢。我同意这里可能不需要反射,使用linq表达式会更好。但是我需要快速地把它转起来,这看起来像是把我的头绕在表达式上会花费我比现在更多的时间。