按属性名称(字符串值)排序列表?
我有一个object
列表。 如何使用属性名称订购此列表?
string orderbyField = "Code"; List l = FillList(); l = l.OrderBy(o => orderbyField);
我可以针对此问题进行扩展吗?
如果您不必将属性名称作为字符串提供,则使用dynamic
非常简单:
List
如果属性名称必须是一个字符串,那么它会变得有点复杂,但可以使用reflection完成(虽然效率不高):
l = l.OrderBy(o => o.GetType() .GetProperty("Code") .GetValue(o, null));
您还应考虑添加一些error handling,例如,如果该属性不存在。
此外,如果列表中的所有元素都具有相同的运行时类型,那么使用表达式树重新编译getter函数并重用它(而不是直接使用reflection)会更有效。
public static Func
并使用它像:
var codeGetter = CreateGetter(l[0].GetType(), "Code"); // using the 1st element as an example l = l.OrderBy(o => codeGetter(o));