使用Linq计算分组数据到Sql

时间:2011-06-24 15:13:58

标签: c# sql linq linq-to-sql

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

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

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

2 个答案:

答案 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);