Подсчет сгруппированных данных с помощью Linq to Sql - PullRequest
0 голосов
/ 24 июня 2011

У меня есть база данных документов в массиве, каждый с владельцем и типом документа, и я пытаюсь получить список из 5 наиболее распространенных типов документов для конкретного пользователя.

var docTypes = _documentRepository.GetAll()
                   .Where(x => x.Owner.Id == LoggedInUser.Id)
                   .GroupBy(x => x.DocumentType.Id);

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

Ответы [ 2 ]

1 голос
/ 24 июня 2011

С помощью выбора вы можете получить значение из ключа группировки (Id), а затем подсчитать каждый элемент в группе.

var docTypes = _documentRepository.GetAll()                   
.Where(x => x.Owner.Id == LoggedInUser.Id)                   
.GroupBy(x => x.DocumentType.Id)
.Select(groupingById=> 
  new
  {
    Id = groupingById.Key,
    Count = groupingById.Count(),
  })
.OrderByDescending(x => x.Count);
1 голос
/ 24 июня 2011

Это упорядочит группы по убыванию, а затем возьмет верхние 5 из них, вы можете приспособиться к другому номеру или полностью убрать Take(), если в вашем случае это не нужно:

var mostCommon = docTypes.OrderByDescending( x => x.Count()).Take(5);

Чтобы просто выбрать верхние ключи документа:

var mostCommonDocTypes = docTypes.OrderByDescending( x => x.Count())
                                 .Select( x=> x.Key)
                                 .Take(5);

Конечно, вы также можете объединить это с вашим исходным запросом, добавив / связав его, просто для ясности в этом ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...