我有一个LINQ查询,我希望有一个委托,我可以分配“OrderBy”或“OrderByDescending”方法。 “OrderBy”扩展方法的签名是:
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector)
有人能告诉我代表的样子吗?
答案 0 :(得分:2)
public delegate IOrderedEnumerable<TSource> OrderByFunc<TSource, TKey>(
IEnumerable<TSource> source,
Func<TSource, TKey> keySelector);
用法:
public OrderByFunc<TSource, TKey> GetOrderByFunc<TSource, TKey>(bool descending)
{
if (descending)
{
return Enumerable.OrderByDescending;
}
else
{
return Enumerable.OrderBy;
}
}
答案 1 :(得分:1)
您可以在构造委托时忽略“this”参数,也可以从委托挂起的实例构造委托。
delegate IOrderedEnumerable<TSource> OrderDelegate<TSource,TKey>
(IEnumerable<TSource> source,
Func<TSource, TKey> keySelector);
答案 2 :(得分:0)
您需要定义一个函数,该函数将表的类型的对象作为参数,并从您要排序的对象返回值:
假设您有一个People
表,每个项目都是Person
,并且您希望按LastName
排序:
public static string ByLastName(Person p)
{
return p.LastName;
}
db.People.Where(p=>p.age > 25).OrderBy(ByLastName);