LINQ排序:无法按类型'System.IComparable'排序

时间:2010-11-13 10:35:34

标签: c# linq lambda sql-order-by expression

我正在构建一个小型搜索类,它使用谓词构建器来获得一些结果:

这是我的查询:

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表达式传递给另一个函数。

任何人都知道我做错了什么?谢谢!

2 个答案:

答案 0 :(得分:1)

OrderBy需要Expression<Func<TSource, TResult>>类型的表达式。在您的代码中,TSourceSearchResultTResultIComparable,无法转换为数据库查询。你希望TResult是一个原始类型等于timeAdded的具体类型,(给定名称,我认为它是DateTime?),以便它可以工作。

Expression<Func<SearchResult, DateTime>> OrderByExpression = x => x.User.timeAdded;
var sortedResult = results.OrderBy(OrderByExpression);

答案 1 :(得分:0)

你有没有尝试过(现在无法访问VS,所以更多的是猜测):

Func<SearchResult, IComparable> OrderByFunc = x => x.User.timeAdded;
var sortedResult = results.OrderBy(OrderByFunc);