2014-01-21 2 views
1

Я хочу получить пять самых повторяющихся записей из таблицы в ссылке на Entity Framework 4.0. Как это возможно в одном запросе, который возвращает список коллекции из пяти записей?Получить пять самых повторяющихся записей в Entity Framework

+0

Что точной записи вы работаете? Как вы определяете, что они повторяют? Пожалуйста, покажите свой код. Без точной информации вы не можете получить точные ответы. –

+0

@SergeyBerezovskiy позвольте мне объяснить вам .. предположим, у меня есть таблица статистики, в которой я сохраняю запись всякий раз, когда член входит в свою учетную запись, теперь я хочу получить пять лучших членов, которые вступили в максимальное количество раз с номером их имени входа. Вам нужно больше объяснений? – user2493843

+2

Этого достаточно для более точного ответа. Но помните - в следующий раз вы должны предоставить всю эту информацию с образцами кода, о которых идет речь. Это даст ответы быстро и точно –

ответ

4

На самом деле вам следует группировать поля, которые определяют, повторяется ли запись или нет. Например. в вашем случае это должно быть что-то вроде идентификатора участника. Затем вы можете ввести новую переменную диапазона, которая будет содержать количество записей в каждой группе. Используйте эту переменную для упорядочения результатов:

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

Смежные вопросы