2013-01-16 85 views
1

我得到這個錯誤:MVC,LINQ的 - 排序問題

DbSortClause expressions must have a type that is order comparable. Parameter name: key | at System.Data.Common.CommandTrees.ExpressionBuilder.Internal.ArgumentValidation.ValidateSortClause(DbExpression key) at System.Data.Common.CommandTrees.ExpressionBuilder.DbExpressionBuilder.ToSortClause(DbExpression key) at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OrderByTranslatorBase.TranslateOneLambda(ExpressionConverter parent, DbExpressionBinding sourceBinding, DbExpression lambda) at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda) at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call) at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod) at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq) at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator 1.Translate(ExpressionConverter parent, Expression linq) at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) at System.Data.Objects.ELinq.ExpressionConverter.Convert() at System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable 1 forMergeOption) at System.Data.Objects.ObjectQuery 1.GetResults(Nullable 1 forMergeOption) at System.Data.Objects.ObjectQuery 1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() at System.Data.Entity.Internal.Linq.InternalQuery 1.GetEnumerator() at System.Data.Entity.Infrastructure.DbQuery 1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() at System.Collections.Generic.List 1..ctor(IEnumerable 1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable 1 source) at MvcMusicStore.Controllers.StoreManagerController.Index(String sortOrder) in

當試圖驗證碼

var albums = db.Albums.Include(a => a.Genre).Include(a => a.Artist); 

      switch (sortOrder) { 
       case "Artist desc": 
        albums = albums.OrderByDescending(o => o.Artist); 
        break; 
       case "Title desc": 
        albums = albums.OrderByDescending(o => o.Title); 
        break; 
       case "Title": 
        albums = albums.OrderBy(o => o.Title); 
        break; 
       case "Genre desc": 
        albums = albums.OrderByDescending(o => o.Genre); 
        break; 
       case "Genre": 
        albums = albums.OrderBy(o => o.Genre); 
        break; 
       default: 
        albums = albums.OrderBy(o => o.Artist); 
        break; 
      } 

      return View(albums.ToList()); 

我不能找到一種方法來排序。

+0

sortOrder吹氣時的價值是什麼? – PeteH

回答

4

你在說.Include(a => a.Artist);以及.OrderByDescending(o => o.Artist);。如果您嘗試按對象Artist排序,那可能會導致您的錯誤。你可能想是這樣的,而不是:

albums = albums.OrderByDescending(o => o.Artist.Name); 

我假設一個Artist具有String財產Name,但也許這就是所謂的不同的東西。 Genre

albums = albums.OrderByDescending(o => o.Genre.Name); 

通常,您需要按原始值進行排序,而不是整個對象。

+0

謝謝你,我一直在看這麼久,錯過了明顯的。 – Martin