我們有一個包含數千個條目的數據庫。我們希望通過其名稱獲得特定項目的「排名位置」。如何在SQL數據庫中使用實體框架獲取行索引而不查詢所有數據?
由於存在大量數據,我們希望避免將查詢所有數據以確定行索引(例如使用ToList()
和IndexOf()
)。
我嘗試使用
List<Ranking> ranking = _context.Testes
.OrderByDescending(t => t.Val)
.Select((d, i) => new Ranking() {
Name = d.Name,
Ranking= i
}).First(d=>d.Name = "Test");
,但我得到這個錯誤:
'value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[WebApplication4.Models.Teste]).OrderByDescending(t => t.Val).Select((d, i) => new Ranking() {Name = d.Name, Ranking = i})': This overload of the method 'System.Linq.Queryable.Select' is currently not supported.
這有可能以某種方式?
跳過並取走尋呼? – ErikEJ
跳過並取得將獲得列表中的第n個位置。我想提供一個「名稱」並查詢它的排名位置。 –
你不能把這個'Select()'重載翻譯成SQL。 ORM不適用於報告,這是100%的報告查詢。 SQL Server提供了諸如'ROW_NUMBER','RANK'和'DENSE_RANK'等排名函數。您可以創建一個視圖來計算排名並將排名映射到它,例如'CREATE VIEW排名AS SELECT名稱,RANK OVER(ORDER BY Val)排名來自測試'。 EF可能會按照慣例將'Ranking'類映射到'Rankings'視圖。如果沒有,則使用'Table'屬性映射它 –