在 LINQ 中选择计数
本文关键字:选择 LINQ | 更新日期: 2023-09-27 18:30:23
我得到了一个带有列ResolvedDate
和ResolvedBy
的SQL Server表。
现在我想选择这两列并计算它们的结果,我想我会这样实现:
_dataContext.Activities
.Where(a => a.IsResolved && a.ResolvedBy == userId)
.Select(a => new { a.ResolvedDate, ***COUNT*** });
如您所见,计数部分丢失。
我想获取在此 SolveDate 中完成的所有活动并对其进行计数。
我该如何实现?
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);