LINQ 包括查询的子集



我在EF Core中有一个实体,它使用如下结构:

课程有一个实体CourseUserRoles,其中包含CourseIdUserIdRoleId

CourseViewModel 具有与Course相同的结构,除了CourseUserRoles,而是它有两个与RoleId相关的布尔值IsAdministratorIsContributor

我正在尝试进行一个查询,该查询不会为查询的每个课程带来所有课程用户角色,而只会为该用户带来特定于课程的角色。

我看到以下语法是正确的:

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/服务器端而不是内存中执行。

最新更新