达到2100参数限制以及如何改进此查询?

时间:2013-07-23 23:14:43

标签: linq-to-sql

我有一个相当复杂的搜索系统,它获取一系列匹配课程,然后显示一个过滤器列表(职业路径),其中包含每个过滤器选项的课程数量。在我获得搜索结果列表之后,我会查询以获得职业路径列表以及有多少课程具有该职业发展路径(一门课程可以有多个职业路径,课程可以通过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
            };

0 个答案:

没有答案