2010-11-13 59 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);