MVC,Linq

编程入门 行业动态 更新时间:2024-10-25 21:31:33
MVC,Linq - 排序问题(MVC, Linq - Sorting issue)

我收到此错误:

DbSortClause表达式必须具有可比较的类型。 参数名称:key | 处于System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator的System.Data.Common.CommandTrees.ExpressionBuilder.DbExpressionBuilder.ToSortClause(DbExpression键)的System.Data.Common.CommandTrees.ExpressionBuilder.Internal.ArgumentValidation.ValidateSortClause(DbExpression键) System.Data上的System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent,MethodCallExpression调用,DbExpression&source,DbExpressionBinding&sourceBinding,DbExpression&lambda)中的.OrderByTranslatorBase.TranslateOneLambda(ExpressionConverter parent,DbExpressionBinding sourceBinding,DbExpression lambda) System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent,MethodCallExpression call,SequenceMethod sequenceMethod)中的.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent,MethodCallExpression call) System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator的System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent,MethodCallExpression linq)1.在System.Data.Objects.ELinq上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)的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.GetResults(Nullable 1 forMergeOption)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 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable 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)在MvcMusicStore.Control lers.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());

我找不到一种方法来对它进行排序。

I get this error:

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.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) at System.Data.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption) at System.Data.Objects.ObjectQuery1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() at System.Data.Entity.Internal.Linq.InternalQuery1.GetEnumerator() at 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) at MvcMusicStore.Controllers.StoreManagerController.Index(String sortOrder) in

When trying this code

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

I cannot find a way to sort it.

最满意答案

你说的是.Include(a => a.Artist); 以及.OrderByDescending(o => o.Artist); 。 如果您尝试按对象 Artist进行排序,则会考虑您的错误。 你可能想要这样的东西:

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

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

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

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

You're saying .Include(a => a.Artist); as well as .OrderByDescending(o => o.Artist);. If you're trying to sort by an object Artist that would account for your error. You probably want something like this instead:

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

I'm assuming that an Artist has a String property Name, but maybe it's called something different. The same would go for Genre:

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

In general, you need to sort by primitive values and not on entire objects.

更多推荐

本文发布于:2023-07-22 19:25:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1222735.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:MVC   Linq

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!