1

我有一个相当复杂的搜索系统,它获取匹配课程列表,然后显示过滤器列表(职业路径)以及每个过滤器选项的课程数量。在获得搜索结果列表后,我进行查询以获取职业路径列表以及有多少课程具有该职业路径(一个课程可以有多个职业路径,并且课程可以通过 CourseVersionId 或 CourseInfoId 与职业路径相关联(听起来奇怪,但这是有原因的)。此时我无法真正更改数据库结构,所以我只是在寻找改进此查询的方法。

如果有很多搜索结果 (1200),那么由于查询的两个包含部分,我达到了 2100 参数限制。我可以通过将结果限制为 1000 来避免该问题,但我希望有更好的方法来执行此查询。

tbCareerPath 是我的职业路径列表,我将完整列表(大约 50 个)缓存在内存中以保存查找。

tbCourseCareerPath 是我的查找表,其中包含通过 CourseVersionId 或 CourseInfoId 关联课程的字段(因此这两个包含)。

courseResults 是我的搜索结果列表,最多可以有 1500 个结果(不寻常但会发生)。

这是我的查询,以获取在搜索结果中有课程的职业道路以及课程数量:

var q2 = from careerPath in tbCareerPath.Cache()
            let courseCount =
            (
                from courseCareerPath in dc.tbCourseCareerPaths
                where courseCareerPath.CareerPathId == careerPath.CareerPathId &&
                ((from course in courseResults
                select (int?)course.Course.CourseVersionId).Contains(courseCareerPath.CourseVersionId) ||    
                (from course in courseResults
                select (int?)course.Course.CourseInfoId).Contains(courseCareerPath.CourseInfoId))
                select courseCareerPath
            ).Count()
            where courseCount > 0
            orderby courseCount descending, careerPath.CareerPathTitle ascending
            select new Filter()
            {
                Id = careerPath.CareerPathId,
                Title = careerPath.CareerPathTitle,
                RecordCount = courseCount
            };
4

0 回答 0