微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linq Order by Icollection导航属性

如何解决Linq Order by Icollection导航属性

我有两个表,分别是itemsmenugroupitemsorder
我的api通过发送page和pagesize获取项目。问题是项目顺序正确。当我从menugroupitemsorder表中按订单号排序时,出现了一个错误,即DbSortClause表达式必须具有与订单可比的类型。

这是我的物品类别,

public class Items
{
   public Guid Id {get;set;}
   public Guid Name {get;set;}
   public virtual List<MenuGroupItemsOrder> MenuGroupItemsOrders{ get; set; } = new List<MenuGroupItemsOrder>();
   ...
}

public class MenuGroupItemsOrder
{
   public Guid MenuGroupId {get;set;}
   public Guid ItemId {get;set;}
   public int OrderNumber {get;set;}
   public virtual Items Items{ get; set; }
   ...
}

MenuGroupItemsOrder表可以为空。

  • 如果为空,请使用DefaultIfEmpty()
  • 如果不为空,则根据以下字段的OrderNumber字段订购商品 MenuGroupItemsOrder表。

这是我的代码

var itemQuery= _itemRepository.GetQueryable(x => x.IsActive);
itemQuery = itemQuery
      .Include(x => x.MenuGroupItemsOrder)
      .OrderBy(m => m.MenuGroupPosItemPairs.Select(r => r.OrderNumber)
      .FirstOrDefault());

这是我的例外:

System.ArgumentException:DbSortClause表达式的类型必须与顺序可比。 参数名称:键 在System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder.Internal.ArgumentValidation.ValidateSortClause(DbExpression键) 在System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder.DbExpressionBuilder.ToSortClause(DbExpression键) 在System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OrderByTranslatorBase.TranslateOneLambda(ExpressionConverter父级,DbExpressionBinding sourceBinding,DbExpression lambda)中 在System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter父级,MethodCallExpression调用,DbExpression&源,DbExpressionBinding&sourceBinding,DbExpression&lambda) 在System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter父级,MethodCallExpression调用

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。