2015-09-22 58 views
0

我有一個參數爲對象的方法,對象是在DocumentModel類屬性的字符串值使用財產屬性信息和使用創建於LAMBDA

private PropertyInfo SortingListView(object obj) 
{ 
    return typeof(DocumentModel).GetProperty(obj.ToString()); 
} 

我想PropertyInfo在拉姆達使用表達如下:

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

但它不工作。有什麼建議麼?或者更好的方法?我做得對嗎?請幫忙。

回答

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表達式中的所有邏輯。

+0

感謝您的快速反應,讓我繼續前進並實施您所說的方式。謝謝你的協助。 –

+0

@AbinMathew不客氣。 – msmolcic

+0

超級作品如魅力...... –