似乎这是一个普遍的要求,但是我在任何地方都找不到解决方案.
我有一个方法,该方法将根据传递给它的参数对集合进行排序.
我想将’OrderBy’的内容传递给该方法,但无法解决该问题.
我尝试过的
我尝试了使用字符串的开关(即,如果您传递“名称”,则会按名称排序的情况出现),但是这感觉很“ hacky”且不必要.
我知道它就像Func< TEntity,TResult>之类的东西,但我不太明白.
伪代码:
GetOrderedCollection([NOT SURE] orderBy)
{
return collection.OrderBy(orderBy);
}
解决方法:
OrderBy是具有以下签名的扩展方法:
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector
)
(来源:https://msdn.microsoft.com/it-it/library/bb534966%28v=vs.110%29.aspx)
因此,您的方法需要一个Func作为其参数,其中TSource是List类型,而TKey是您的lambda返回的类型.
一个例子是:
public void Method<TSource, TKey>(List<TSource> list, Func<TSource, TKey> func)
{
...
IOrderedEnumerable<TSource> orderedEnumerable = list.OrderBy(func);
}
编辑:
我还注意到,在您的示例代码中,您将方法声明为void,但是然后您试图返回IOrderedEnumerable.
如果您想取回有序集合,则您的方法至少需要具有IEnumerable类型(但这会破坏对它进行排序的目的,因为IEnumerables不能保证顺序.更可能的实现是返回List< TSource> ;并调用list.OrderBy(func).ToList()