此问题在此处已有答案:
How do I specify the Linq OrderBy argument dynamically? [duplicate](12个答案)
6天前关闭。
我有一个Table类,我向它传递了一个名为 data 的对象的通用列表。
public class Table<T>
{
private List<T> _data;
public Table(List<T> data)
{
_data = data;
//other constructor stuff
}
}
这个想法是Table类将“构建”一个表,将存储在 data 中的T类型对象的所有公共属性作为列列出。我通过执行_data[0].GetType().GetProperties()
来检索属性并构建列标题来实现这一点。然后我在列标题上实现了一个click事件,以便通过单击它,数据将按此属性排序。问题就出在这里,我不能让Linq按给定的属性排序,因为在编译时,对象的类型是未知的。
我试过
_data = _data.OrderBy(e => e.GetType().GetProperty("Surname")).ToList<T>();
其中Surname
是我知道我的测试对象(存储在_data中)具有的属性。
我没有得到任何错误,但似乎命令的指令没有做任何事情。出了什么问题?有没有一种不那么复杂的方法来做到这一点?(顺便说一句,我没有使用WPF,所以我想没有必要使用DataTable)。
我发现类似的问题已经得到了回答,但在所有这些问题中,List的T类型在编译时都是已知的。
谢谢你的帮助。
1条答案
按热度按时间xqkwcwgp1#
你可以使用
PropertyInfo.GetValue
:但一般来说,我建议你去找一些工具来避免使用反射。或者至少试着把反射从LINQ中移走:
或者更好地“缓存”它(看看这些答案之一-one,two)。