【问题标题】:MVC, Linq - Sorting issueMVC,Linq - 排序问题
【发布时间】:2013-01-16 13:59:42
【问题描述】:

我收到此错误:

DbSortClause 表达式必须具有顺序可比的类型。参数名称:key |在 System.Data.Common.CommandTrees.ExpressionBuilder.Internal.ArgumentValidation.ValidateSortClause(DbExpression key) 在 System.Data.Common.CommandTrees.ExpressionBuilder.DbExpressionBuilder.ToSortClause(DbExpression key) 在 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) 在 System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator1.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) 在 System.Data.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption) 在 System.Data.Objects.ObjectQuery1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() at System.Data.Entity.Internal.Linq.InternalQuery1.GetEnumerator() 在 System.Data.Entity.Infrastructure.DbQuery1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() at System.Collections.Generic.List1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source) 在 MvcMusicStore.Controllers.StoreManagerController。

中的索引(字符串排序顺序)

尝试此代码时

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

我找不到排序的方法。

【问题讨论】:

  • sortOrder 爆炸时的值是多少?

标签: c# asp.net-mvc-3 linq


【解决方案1】:

你说的是.Include(a => a.Artist);.OrderByDescending(o => o.Artist);。如果您尝试按 object Artist 进行排序,这将导致您的错误。你可能想要这样的东西:

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

我假设Artist 有一个String 属性Name,但也许它被称为不同的东西。 Genre 也是如此:

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

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

【讨论】:

  • 呃,谢谢你,我看了这么久,错过了明显的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多