2014-07-19 58 views
3

我在查詢數據庫中的對象,並想知道如何獲得它發生的排名順序。所以,我有這樣的:如何獲得實體框架中的行排名

var productRank = db.Products.OrderBy(i => i.WilsonScore); 

所以我想利用產品的列表,以便然後通過他們的得分和獲得的產品ID,我選擇的行數。所以我們假設我得到

ProductID|Score 
12 0.99 
23 0.95 
34 0.93 

我想獲得返回結果的行號爲34的產品。在這種情況下,這將是3,如果我選擇了12號,這將是1

回答

3

您可以通過選擇得到索引...

var productRanks = db.Products.OrderByDescending(i => i.WilsonScore) 
         .Select((p, idx) => new { Rank = idx + 1, Product = p }); 

var product34Rank = productRanks 
         .Single(p => p.Product.ProductID == 34) 
         .Rank; // 3 
+4

我得到一個異常「LINQ到實體無法識別方法'System.Linq.IQueryable'1 [<> f__AnonymousType9'3 [System.Int64,System.Int32,System.Int32]]選擇[<> f__AnonymousType8'2,<> f__AnonymousType9'3](System。 Linq.IQueryable'1 [<> f__AnonymousType8'2 [System.Int64,System.Int32]],System.Linq.Expressions.Expression'1 [System.Func'3 [<> f__AnonymousType8'2 [System.Int64,System。 Int32],System.Int32,<> f__AnonymousType9'3 [System.Int64,System.Int32,System.Int32]]])'方法,並且此方法不能轉換爲存儲表達式。「 –

+0

同樣在這裏。這種選擇的重載只能在內存中工作,但EF無法將其轉換爲SQL ... – Clement