2014-01-21 56 views
1

我想從鏈接到Entity Framework 4.0的表中獲得排名前五位的重複記錄。在一個返回五個記錄集合列表的單個查詢中如何實現?獲取實體框架中排名前五位的重複記錄

+0

您正在使用什麼確切的記錄查詢?你如何定義他們重複?請顯示你的代碼。沒有確切的信息,你無法得到確切的答案。 –

+0

@SergeyBerezovskiy讓我給你解釋一下..假設我有一個統計表,當我登錄到他的賬戶時,我保存了一條記錄,現在我想得到登錄時間最長的五位成員。你需要更多的解釋嗎? – user2493843

+2

這足以提供更準確的答案。但請記住 - 下次您應該直接提供有關代碼示例的所有信息。這將使答案快速,準確 –

回答

4

實際上你應該按字段進行分組,這些字段定義記錄是否重複。例如。在你的情況下,它應該是像會員ID一樣。然後,您可以引入新的範圍變量,它將保留每個組中的記錄數。使用該變量的排序:

var query = from s in db.Statistics 
      group s by s.MemberId into g // group by member Id 
      let loginsCount = g.Count() // get count of entries for each member 
      orderby loginsCount descending // order by entries count 
      select new { // create new anonymous object with all data you need 
       MemberId = g.Key, 
       LoginsCount = loginsCount 
      }; 

然後取前5:

var top5 = query.Take(5); 

,將產生類似

SELECT TOP (5)        // Take(5) 
[GroupBy1].[K1] AS [MemberId],    // new { MemberId, LoginsCount } 
[GroupBy1].[A1] AS [C1] 
FROM (SELECT 
     [Extent1].[MemberId] AS [K1], 
     COUNT(1) AS [A1]      // let loginsCount = g.Count() 
     FROM [dbo].[Statistics] AS [Extent1] 
     GROUP BY [Extent1].[MemberId]  // group s by s.MemberId 
) AS [GroupBy1] 
ORDER BY [GroupBy1].[A1] DESC    // orderby loginsCount descending 
+1

這似乎很有幫助,非常感謝。鏈接到實體的確切查詢是什麼? – user2493843

+0

@ user2493843我已經更新了生成的SQL查詢示例的答案:) –

8

您只需按計數進行分組,按次數降序,然後取(5)。分組示例等,可在101 LINQ Samples找到。

+0

我沒有得到它,你可以請建議我的確切查詢? – user2493843