Linq to sql 达到2100参数限制,如何改进此查询?

Linq to sql 达到2100参数限制,如何改进此查询?,linq-to-sql,Linq To Sql,我有一个相当复杂的搜索系统,它会得到一个匹配课程的列表,然后显示一个过滤器列表(职业路径)以及每个过滤器选项的课程数。在获得搜索结果列表后,我会进行查询,以获得职业路径列表以及有多少课程具有该职业路径(一门课程可以有多条职业路径,并且课程可以通过CourseVersionId或CourseInfo与职业路径相关联(听起来很奇怪,但这是有原因的).目前我无法真正更改数据库结构,因此我正在寻找改进此查询的方法 如果有很多搜索结果(1200),那么由于查询的两个包含部分,我达到了2100参数限制。我可

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

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

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

TbCourseCarPath是我的查找表,其中有字段可根据CourseVersionId或CourseInfo(因此这两个字段包含)关联课程

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
            };