我最近從ASP.NET-Core 2.2升級到ASP.NET-Core 3.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'/span>))。
break。
這不再起作用了,因為ASP.NET-Core 3.1在服務器上而不是在客戶端評估它。 它不理解.PadLeft()
。補充:我正在進行分頁,所以查詢是在這一行運行的:
items = await source. Skip(
(pageIndex - 1) * pageSize)
.Take(pageSize).ToListAsync()。
如果我在這之前進入toList,我就不會把查詢的結果限制在所選擇的結果數量上......
uj5u.com熱心網友回復:
你有一個錯誤,因為Linq不能將你的代碼轉換為Sql查詢。所以你必須首先使用ToList(或ToArray)從資料庫下載資料,例如。在這之后,你可以使用任何一種演算法對串列進行排序。
Items = _context.Inventory.Where(m => m.Removed == 0).ToList();
Items = items.OrderByDescending(s => s.Quantity.PadLeft(maxlen,'0') )。
uj5u.com熱心網友回復:
試著這樣做。 Convert.ToInt32會自動從EF轉換為查詢。
Items = Items.OrderByDescending(s => Conert.ToInt32(s.Quantity))。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/310113.html
標籤:
