在 LINQ 中选择计数

本文关键字:选择 LINQ | 更新日期: 2023-09-27 18:30:23

我得到了一个带有列ResolvedDateResolvedBy的SQL Server表。

现在我想选择这两列并计算它们的结果,我想我会这样实现:

_dataContext.Activities
    .Where(a => a.IsResolved && a.ResolvedBy == userId)
    .Select(a => new { a.ResolvedDate, ***COUNT*** });

如您所见,计数部分丢失。

我想获取在此 SolveDate 中完成的所有活动并对其进行计数。

我该如何实现?

在 LINQ 中选择计数

from a in dataContext.Activities
where a.IsResolved && a.ResolvedBy == userId
group a by a.ResolvedDate into g
select new {ResolvedOn=g.Key, NumberResolved= g.Count()}

如果您尝试按日期计算每个项目,则需要使用 GroupBy

var countsByDate = _dateContext.Activities
                           .Where(a => a.IsResolved && a.ResolvedBy == userId)
                           .GroupBy(a => a.ResolvedDate)
                           .Select(g => new {ResolvedDate = g.Key, Count = g.Count() });

您必须按 SolveDate 对数据进行分组,才能解决每天的活动数。

var dates = from a in dataContext.Activities
            where a.IsResolved && a.ResolvedBy == userId
            group a by a.ResolvedDate into g
            select new { Date = g.Key, Count = g.Count() }

要仅按天(没有小时、分钟等)分组,您可以更改 group 语句:

var dates = from a in dataContext.Activities
            where a.IsResolved && a.ResolvedBy == userId
            group a by a.ResolvedDate.Date into g
            select new { Date = g.Key, Count = g.Count() }
var dates = dataContext.Activities
    .Where(a => a.IsResolved && a.ResolvedBy == userId)
    .Select(a => a.ResolvedDate)
    .ToList();
var count = dates.Count;

如果您只想获取计数,则可以通过单独选择计数来使其更快:

var count = dataContext.Activities
    .Count(a => a.IsResolved && a.ResolvedBy == userId);