2010-11-13 38 views
0

我建立一个使用predicatebuilder得到一些结果的小的搜索类:LINQ排序:不能按类型排序“System.IComparable”

这里是我的查询:

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); 

结果成为枚举信息搜索结果的:

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子句(它工作)吗?我这样做的原因是我想将order by表达式传递给另一个函数。

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

+0

请显示OrderByExpression的实现 – Dyppl 2010-11-13 10:40:29

回答

0

你试过(以VS没有访问权限了,所以它更多的是猜测):

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

OrderBy预计Expression<Func<TSource, TResult>>类型的表达式。在您的代码中,TSourceSearchResultTResultIComparable,它不能转换为数据库查询。你想TResult是一个原始类型,相当于timeAdded的具体类型(给定名称,我假设它是一个DateTime?),以使其起作用。

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