如何让用户在IQueryable中按时间分组



我有这个查询

var creature = await _context.Data
.Where(x => x.Id.Contains("mono"))
.GroupBy(group => new
{   
month = group.Time.Month,
year = group.Time.Year,
})
.Select(data => new 
{
data.Key.month,
data.Key.year,
User = data.Select(x => x.User.Distinct().Count())
})
.ToListAsync()

我需要清楚地获取用户数量,并按月份和年份对其进行分组。

但我得到一个错误,查询是不可读的,无法翻译!

我应该在这里修改什么?

老实说,有时编写IQueryable<T>表达式的最佳方法是:不要;它看起来像_context这里是一个DB上下文,最像实体框架。如果是这样:只需使用SQL(具体的API取决于您的EF版本,和/或您是否愿意使用Dapper之类的东西,当查询不需要任何ORM输入时,这可能很有用(;SQL将类似于:

select  DATEPART(year, yt.Time) as [Year],
DATEPART(month, yt.Time) as [Month],
COUNT(DISTINCT yt.UserId) as [Users]
from YourTable yt
where yt.Id like '%mono%'
group by DATEPART(year, yt.Time), DATEPART(month, yt.Time)
order by DATEPART(year, yt.Time), DATEPART(month, yt.Time);

最新更新