我在EF Core中有一个实体,它使用如下结构:
课程有一个实体CourseUserRoles,其中包含CourseId、UserId和RoleId。
CourseViewModel 具有与Course相同的结构,除了CourseUserRoles,而是它有两个与RoleId相关的布尔值IsAdministrator和IsContributor。
我正在尝试进行一个查询,该查询不会为查询的每个课程带来所有课程用户角色,而只会为该用户带来特定于课程的角色。
我看到以下语法是正确的:
query = query.Include(x => x.CourseUserRoles.Where(y => y.UserId == userId));
在查询尝试返回课程列表的地方,我只想包含与用户具有相同 ID 的课程。 问题是上面会抛出异常。
是否可以仅在课程具有用户 ID 时包含课程用户角色?如果没有,它将返回空列表或空列表。
我通常通过创建单独的查询并按如下方式连接来执行此操作:
query = query.Where(x => x.CourseUserRoles.UserId != userId)
var queryWithInclude = query.Where(x => x.CourseUserRoles.UserId == userId)
.Include(x => x.CourseUserRoles)
var fullDataset = query.Concat(queryWithInclude);
这会将两个查询对象保留为 IQueryable 类型而不是 IEnumerable,从而允许在 SQL/服务器端而不是内存中执行。