首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于在ASP.NET-Core 3.0及更高版本中对数字等字符串进行排序的Linq查询

用于在ASP.NET-Core 3.0及更高版本中对数字等字符串进行排序的Linq查询
EN

Stack Overflow用户
提问于 2021-09-01 17:48:11
回答 2查看 238关注 0票数 1

我最近从ASP.NET-Core 2.2升级到了ASP.NET-Core 3.1。我的数量是字符串(大多数只是数字,但我们也有一些是100英尺,1线轴,等等)在2.2中,我可以使用PadLeft对它们进行排序,但这会在ASP.NETCore3.0及更高版本中抛出错误。有没有人知道使用LINQ查询对字符串中的数字进行排序的好办法?(所以你不会得到"999",然后是"99",然后是"888","88",等等)

我以前的解决方案是:

代码语言:javascript
复制
  IQueryable<InventoryItem> Items;
  Items = from m in _context.Inventory.Where(m => m.Removed == 0)
                                              select m;
    case "Quantity":
         Items = Items.OrderByDescending(s => s.Quantity.PadLeft(maxlen, '0'));
         break;

这不再起作用,因为ASP.NET-Core 3.1在服务器而不是在客户端对其进行评估。它不理解.PadLeft()

添加:我正在分页,所以查询在这一行上运行:

代码语言:javascript
复制
 items = await source.Skip(
                    (pageIndex - 1) * pageSize)
                    .Take(pageSize).ToListAsync();

如果我在此之前使用toList,我不会将查询结果限制在选择的结果数量上……

EN

回答 2

Stack Overflow用户

发布于 2021-09-01 18:16:02

您有一个错误,因为Linq无法将您的代码转换为Sql查询。因此,您必须首先使用ToList (或ToArray)从数据库下载数据。在此之后,您可以使用任何类型的算法对列表进行排序。

代码语言:javascript
复制
Items = _context.Inventory.Where(m => m.Removed == 0).ToList();

Items = items.OrderByDescending(s => s.Quantity.PadLeft(maxlen,'0'));
票数 1
EN

Stack Overflow用户

发布于 2021-09-02 06:21:59

试着这样做。Convert.ToInt32会自动从EF转换为查询。

代码语言:javascript
复制
Items = Items.OrderByDescending(s => Conert.ToInt32(s.Quantity));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69018483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档