使用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,所以任何帮助都会很棒。
这将通过递减计数对组进行排序,然后取其中的前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);