我最近从ASP.NET-Core 2.2升级到了ASP.NET-Core 3.1。我的数量是字符串(大多数只是数字,但我们也有一些是100英尺,1线轴,等等)在2.2中,我可以使用PadLeft对它们进行排序,但这会在ASP.NETCore3.0及更高版本中抛出错误。有没有人知道使用LINQ查询对字符串中的数字进行排序的好办法?(所以你不会得到"999",然后是"99",然后是"888","88",等等)
我以前的解决方案是:
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()
添加:我正在分页,所以查询在这一行上运行:
items = await source.Skip(
(pageIndex - 1) * pageSize)
.Take(pageSize).ToListAsync();如果我在此之前使用toList,我不会将查询结果限制在选择的结果数量上……
发布于 2021-09-01 18:16:02
您有一个错误,因为Linq无法将您的代码转换为Sql查询。因此,您必须首先使用ToList (或ToArray)从数据库下载数据。在此之后,您可以使用任何类型的算法对列表进行排序。
Items = _context.Inventory.Where(m => m.Removed == 0).ToList();
Items = items.OrderByDescending(s => s.Quantity.PadLeft(maxlen,'0'));发布于 2021-09-02 06:21:59
试着这样做。Convert.ToInt32会自动从EF转换为查询。
Items = Items.OrderByDescending(s => Conert.ToInt32(s.Quantity));https://stackoverflow.com/questions/69018483
复制相似问题