使用Linq到Sql对分组数据进行计数

本文关键字:数据 Linq Sql 使用 | 更新日期: 2023-09-27 18:00:31

我有一个数组中的文档数据库,每个数据库都有一个所有者和一个文档类型,我正试图为特定用户获取5种最常见的文档类型的列表。

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

这将返回属于特定所有者的所有文档,并根据我的需要进行分组,我现在需要一种方法来提取最常见文档类型的id。我不太熟悉Linq到Sql,所以任何帮助都会很棒。

使用Linq到Sql对分组数据进行计数

这将通过递减计数对组进行排序,然后取其中的前5个,您可以适应另一个数字,或者如果您的情况不需要,则完全取下Take()

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

只需选择顶部文档键:

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

当然,您也可以通过附加/链接它来将其与原始查询相结合,为了清楚起见,在这个答案中只是分开了。

使用Select可以从分组的Key(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);