我有这个查询
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);