linq - Linq to sql,查询多对多与其他计数
问题描述
我有一个多对多的关系,我正在尝试创建一个查询,它将获取我的左侧和一个计算由它引用的记录数的属性。
以下是我的查询
var dbSet = await (from user in _dbContext.Users
where (from courseUsers in _dbContext.CourseUsers select courseUsers.UserId).Contains(user.Id)
select new
{
Name = user.Name,
Id = user.Id,
CourseUsersCount = _dbContext.CourseUsers.Where(item => item.UserId == user.Id).Count()
})
.ToListAsync();
我不喜欢 CourseUsersCount 的计算方式。我还想包括总计数属性,我这样做的方式是在其上添加另一个属性,它只select
会对 进行计数,_dbContext.CourseUsers
然后再进行另一个内存转换。
最后,我希望创建具有此结构的结果
{
count: 1000,
data: [{
Id: 1,
Name: "c",
CourseUsersCount: 2
}]
}
我想知道如何使用 linq-to-sql 直接执行此操作。
解决方案
如评论中所述,您必须使用 GroupBy 进行此类计算:
var query
from user in _dbContext.Users
from courseUsers in user.Courses
group user by new { user.Id, user.Name } into g
select new
{
g.Key.Id,
g.Key.Name,
CourseUsersCount = g.Count()
};
推荐阅读
- dart - 调用 setState 后抽屉主体未更新
- java - 谷歌日历如何获取日期对象
- highcharts - 我可以使用 highchart 构建圆形热图吗
- google-cloud-platform - 谷歌云 SDK 安装错误:无法更新 [/Users/username/.bash_profile]。确保您对此位置具有写入权限
- javascript - npm 不断在全球范围内安装
- python - [0,0] 表达式有什么作用?
- python - 循环列以一次比较数据框中的两列,并根据每个比较结果添加一个汇总列
- ios - 构建失败并显示“命令 PrecompileSwiftBridgingHeader 失败,退出代码为非零”
- laravel - 如何在 Laravel 中使非数据库模型具有两个属性
- android - 使用 react-native init 后如何在 expo 上运行 React-Native 应用程序?