我收到此错误:


  DbSortClause表达式必须具有顺序可比的类型。参数名称:key |在System.Data.Common.CommandTrees.ExpressionBuilder.Internal.ArgumentValidation.ValidateSortClause(DbExpression键)在System.Data.Common.CommandTrees.ExpressionBuilder.DbExpressionBuilder.ToSortClause(DbExpression键)在System.Data.Objects.ELinq.ExpressionConlator。 .OrderByTranslatorBase.TranslateOneLambda(ExpressionConverter父级,DbExpressionBinding sourceBinding,DbExpression lambda)位于System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter父级,MethodCallExpression调用,DbExpression&源,在DbExpressionBinding上的DbExpressionBinding) System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter父,MethodCallExpression调用,SequenceMethod sequenceMethod)处的.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter父方法调用) System.Data.Objects.ObjectQuery 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处的System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter父级,System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator 1.GetResults(Nullable 1 forMergeOption) MvcMusicStore.Controllers.StoreManagerController上System.Data.Entity.Infrastructure.DbQuery 1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() at System.Data.Entity.Internal.Linq.InternalQuery 1..ctor(IEnumerable 1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() at System.Collections.Generic.List 1源)上System.Data.Objects.ObjectQuery 1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable 1.GetEnumerator()的forMergeOption)。索引(字符串sortOrder)在


尝试此代码时

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


我找不到排序的方法。

最佳答案

您说的是.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);


通常,您需要按原始值而不是按整个对象排序。

关于c# - MVC,Linq-排序问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14360109/

10-12 15:54
查看更多