2013-04-08 118 views
2

我想創建下列方法,它接受一個lambda表達式並通過它對數據進行排序。我似乎無法正確設置它。傳遞lambda表達式作爲方法參數

會看起來像這樣?是lambda表達式:

public static MyList<T> PageAndSort<T>(this IEnumerable<T> data, ???) 

會像這樣使用:

MyList.PageAndSort(List<MyEntity> data, x=>x.ChildEntity.Name) 
+0

的標籤說,C#..所以我們可以假設:P – 2013-04-08 10:32:02

回答

6

LINQ有一個非常類似的方法:OrderBy。看看它的簽名和模仿它:

public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
    this IEnumerable<TSource> source, 
    Func<TSource, TKey> keySelector 
) 

適用於您的情況:

public static MyList<TSource> PageAndSort<TSource, TKey>(
    this IEnumerable<TSource> data, 
    Func<TSource, TKey> keySelector 
) 

Func<T, TResult>T類型的一個參數,它返回一個TResult的委託。

+0

謝謝!奇蹟般有效 – 2013-04-08 13:26:39

2

使用Action<T>Func<T>取決於如果您需要返回PARAM與否。

所以:

public static MyList<T> PageAndSort<T>(this IEnumerable<T> data, Action<T> sortBy) 

其中T是要排序的類型更換,所以刺等

+1

哎呀,它不會讓我補充行動注:行動後,它< T >類型。 – 2013-04-08 10:33:06

+0

'Func '沒有輸入,'Action '也不適合,因爲你需要一個結果可以作爲排序的關鍵。 – CodesInChaos 2013-04-08 10:45:54