使用属性由Property Info创建并在Lambda中使用

时间:2015-09-22 15:44:38

标签: c# reflection lambda

我有一个带参数作为对象的方法,该对象是DocumentModel

中属性的字符串值
 private PropertyInfo SortingListView(object obj)
 {
     return typeof(DocumentModel).GetProperty(obj.ToString());
 }

我希望PropertyInfo在lambda表达式中使用,如下所示:

 var SortedDocuments=Documents.OrderByDescending(x => SortingListView(obj));

但它没有用。有什么建议?还是更好的方式?我做得对吗?请帮忙。

1 个答案:

答案 0 :(得分:1)

如果我做对了,你就试图按照传递的属性对DocumentModel列表进行排序。你目前正在这样做的方式是错误的,因为你实际上是按你的属性的PropertyInfo对它们进行排序,并且由于所有对象都属于同一类型,因此基本上什么都不做。你需要做的事情是这样的:

private object SortingListView<T>(T obj, string propertyName)
{
    return typeof(T).GetProperty(propertyName).GetValue(obj);
}

您可以这样称呼它:

var obj = "SomePropertyName";
var sortedDocuments = Documents.OrderByDescending(x => SortingListView(x, obj));

如果您只是在这里使用它,您也可以这样做:

var obj = "SomePropertyName";
var sortedDocuments = Documents.OrderByDescending(x =>
                          typeof(DocumentModel).GetProperty(obj).GetValue(x));

这样你就不需要额外的方法,你拥有lambda表达式中的所有逻辑。