Linq查询排序字符串,如ASP中的数字.NET-Core 3.0及以上版本



我最近从ASP升级。NET-Core 2.2到ASP。NET-Core 3.1。我的数量是字符串(大多数只是数字,但我们有一些是100英尺,1线轴,等等…)在2.2中,我可以通过使用PadLeft对这些进行排序,但这会在asp.net core3.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,我不会将查询结果限制为所选结果的数量…

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

Items = _context.Inventory.Where(m => m.Removed == 0).ToList();
Items = items.OrderByDescending(s => s.Quantity.PadLeft(maxlen,'0'));

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

Items = Items.OrderByDescending(s => Conert.ToInt32(s.Quantity));

最新更新