我有一个带参数作为对象的方法,该对象是DocumentModel
类
private PropertyInfo SortingListView(object obj)
{
return typeof(DocumentModel).GetProperty(obj.ToString());
}
我希望PropertyInfo
在lambda表达式中使用,如下所示:
var SortedDocuments=Documents.OrderByDescending(x => SortingListView(obj));
但它没有用。有什么建议?还是更好的方式?我做得对吗?请帮忙。
答案 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表达式中的所有逻辑。