如何解决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 的计算方式。我还想包括 total count 属性,我这样做的方法是在 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()
};
,
您需要一个 Group By 将所有 CourseUsers 合并为一个集合,然后是一个 Join 以将用户附加到它。
from course in _dbContext.CourseUsers // outer sequence
group course by course.UserId into courseGrp
join user in _dbContext.Users //inner sequence
on courseGrp.Key equals user.UserId// key selector
select new { // result selector
CourseUsersCount = courseGrp.Count(),user.Name,user.Id
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。