LINQ 排序:无法按类型“System.IComparable”排序
我正在构建一个小型搜索类,它使用 predicatebuilder 来获取一些结果:
这是我的查询:
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);
结果成为 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 表达式传递给另一个函数。
有人知道我做错了什么吗?谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
OrderBy
需要一个Expression>
类型的表达式。在您的代码中,TSource
是SearchResult
,TResult
是IComparable
,无法转换为数据库查询。您希望TResult
成为一个原始类型,等于timeAdded
的具体类型(根据名称,我假设它是一个DateTime
?)这个工作。OrderBy
expects an expression of typeExpression<Func<TSource, TResult>>
. In your code,TSource
isSearchResult
andTResult
isIComparable
, which can't be translated to a DB query. You wantTResult
to be a primitive type equals to the concrete type oftimeAdded
, (given the name, I assume it's aDateTime
?) for this to work.你有没有尝试过(现在无法访问VS,所以这更多是猜测):
Have you tried (no access to VS right now, so it's more of a guess):