1

このエラーが発生します:

DbSortClause式は、順序が比較可能な型である必要があります。パラメータ名:キー| 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、DbExpressionBind .Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator。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(Nullable1 forMergeOption)at System.Data.Objects.ObjectQuery 1.GetResults(Nullable1 forMergeOption)at System.Data.Objects.ObjectQuery 1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() at System.Data.Entity.Internal.Linq.InternalQuery1.GetEnumerator()at System.Data.Entity.Infrastructure.DbQuery 1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() at System.Collections.Generic.List1..ctor(IEnumerable 1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable1 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());

並べ替える方法が見つかりません。

4

1 に答える 1

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

一般に、オブジェクト全体ではなく、プリミティブ値で並べ替える必要があります。

于 2013-01-16T14:02:51.353 に答える