Linq to sql,使用其他计数查询多对多
Linq to sql, query many-to-many with count of other
我有一个多对多关系,我正在尝试创建查询,它将获取左侧和一个 属性,它计算由它引用的记录数。
以下是我的查询
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.
直接执行此操作
您需要一个 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
};
如评论中所述,您必须使用 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()
};
我有一个多对多关系,我正在尝试创建查询,它将获取左侧和一个 属性,它计算由它引用的记录数。
以下是我的查询
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.
直接执行此操作您需要一个 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
};
如评论中所述,您必须使用 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()
};