【发布时间】:2010-11-13 18:51:49
【问题描述】:
我正在构建一个小型搜索类,它使用谓词构建器来获取一些结果:
这是我的查询:
var results = (from u in db.users
join p in db.profiles on u.userId equals p.UserID
select new SearchResult { Profile = p, User = u }).AsQueryable().Where(predicate);
Results 成为 SearchResult 的可枚举:
public class SearchResult
{
public user User { get; set; }
public profile Profile { get; set; }
}
这很好,但现在我也想对其进行排序:
var sortedResult = results.OrderBy(x => x.User.timeAdded);
这也很好,除非我这样做:
Expression<Func<SearchResult, IComparable>> OrderByExpression = x => x.User.timeAdded;
var sortedResult = results.OrderBy(OrderByExpression);
我收到此错误:无法按类型“System.IComparable”订购。
这与将 lambda 查询直接放入 orderby 子句(有效)不完全相同吗?我这样做的原因是我想将 orderby 表达式传递给另一个函数。
谁知道我做错了什么?谢谢!
【问题讨论】:
-
请展示 OrderByExpression 的实现
标签: c# linq lambda sql-order-by expression