2013-04-08 115 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