我有一个数组中的文档数据库,每个文档都有一个所有者和一个文档类型,我正在尝试获取特定用户的5种最常见文档类型的列表。
var docTypes = _documentRepository.GetAll()
.Where(x => x.Owner.Id == LoggedInUser.Id)
.GroupBy(x => x.DocumentType.Id);
这将返回属于特定所有者的所有文档并按需要分组,我现在需要一种方法来提取最常见文档类型的ID。我对Linq to Sql不太熟悉,所以任何帮助都会很棒。
答案 0 :(得分:1)
这会按照计数降序对这些组进行排序,然后取其前5位,如果您的情况不需要,则可以适应其他数字或完全删除Take()
:
var mostCommon = docTypes.OrderByDescending( x => x.Count()).Take(5);
只需选择顶部文档键:
var mostCommonDocTypes = docTypes.OrderByDescending( x => x.Count())
.Select( x=> x.Key)
.Take(5);
您当然也可以通过附加/链接将其与原始查询相结合,只是为了清晰起见而分开。
答案 1 :(得分:1)
使用“选择”,您可以从分组键(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);