Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MVC4中Linq中的滤波_Linq_Asp.net Mvc 4 - Fatal编程技术网

MVC4中Linq中的滤波

MVC4中Linq中的滤波,linq,asp.net-mvc-4,Linq,Asp.net Mvc 4,我的表格结构如下 课程 ID CourseName 1 PHP 2 WORDPRESS ID MainCourseName 1 FoundationPhp 2 FoundationWordPress 3 Diploma ID MainCourseID CourseID 1 1 1 2 2 2 3

我的表格结构如下

课程

ID    CourseName     

1       PHP
2       WORDPRESS
ID     MainCourseName
1       FoundationPhp
2       FoundationWordPress
3       Diploma
ID       MainCourseID   CourseID
 1           1             1
 2           2             2
 3           3             1
 3           3             2 
MainCourse

ID    CourseName     

1       PHP
2       WORDPRESS
ID     MainCourseName
1       FoundationPhp
2       FoundationWordPress
3       Diploma
ID       MainCourseID   CourseID
 1           1             1
 2           2             2
 3           3             1
 3           3             2 
分课程

ID    CourseName     

1       PHP
2       WORDPRESS
ID     MainCourseName
1       FoundationPhp
2       FoundationWordPress
3       Diploma
ID       MainCourseID   CourseID
 1           1             1
 2           2             2
 3           3             1
 3           3             2 
我有一个搜索场景,应该得到以下结果

当用户单独通过
PHP
进行搜索时,应该会得到以下结果

 MainCourseName    CourseCombination    
  FoundationPHP       PHP
  Diploma             PHP,WORDPRESS
  MainCourseName           CourseCombination    
  FoundationWordPress       WORDPRESS
  Diploma                   PHP,WORDPRESS
  MainCourseName        CourseCombination    
  FoundationPHP         PHP
  FoundationWordPress   WORDPRESS
  Diploma               PHP,WORDPRESS
当用户单独通过
WORDPRESS
进行搜索时,应得到以下结果

 MainCourseName    CourseCombination    
  FoundationPHP       PHP
  Diploma             PHP,WORDPRESS
  MainCourseName           CourseCombination    
  FoundationWordPress       WORDPRESS
  Diploma                   PHP,WORDPRESS
  MainCourseName        CourseCombination    
  FoundationPHP         PHP
  FoundationWordPress   WORDPRESS
  Diploma               PHP,WORDPRESS
当用户通过
PHP,WORDPRESS
进行搜索时,他应该得到以下结果

   MainCourseName           CourseCombination
    Diploma                    PHP,WORDPRESS  
注意:如果有任何其他组合同时包含
PHP和WORDPRESS
,也应显示。此类组合的示例将类似于
PHP、WORDPRESS、JAVA

我试过下面的方法

     List<int> CourseId={1,2}//means user searches by both PHP & WORDPRESS
     var courseList = _db.SubCourses
                      .AsEnumerable()
                      .Where(mcd => courseId.Contains(mcd.Course.Id))
                      .Select(mc => new RegistraionVM.clsCourseCodeSearch
                       {
                          CourseCode = mc.MainCourse.MainCourseName,
                          CourseCombination = string.Join(",", mc.MainCourse.SubCourse
                                                                .Select(mcd => mcd.Course.Name))                     

                        }).Distinct().Take(5).ToList();
期望的结果是

  MainCourseName        CourseCombination        
  Diploma               PHP,WORDPRESS
如何获得上述结果

PHP=1 MainCourse1和MainCourse3的课程PHP=1 所以应该说:

基础PHP WORDPRESS PHP文凭


或者我不理解您的问题。

您需要首先按
MainCourseID
分组,然后使用
.All()
子句仅选择所有生成的子课程都包含在筛选器中的项目

var filter = new int[] { 1 }; // or new int[] { 1, 2 } etc

var results = list.GroupBy(x => x.MainCourseID).Select(x => new
{
    MainCourse = x.FirstOrDefault().MainCourse,
    SubCourseIDs = x.Select(y => y.Course.ID),
    SubCourseNames = x.Select(y => y.Course.CourseName)
}).Where(x => filter.All(y => x.SubCourseIDs.Contains(y))).Select(x => new RegistraionVM.clsCourseCodeSearch()
{
    CourseCode = x.MainCourse.MainCourseName,
    CourseCombination = String.Join(", ", x.SubCourseNames)
}).Take(5).ToList();

没错,但是如果用户通过
PHP、WORDPRESS
进行搜索,那么这两门课程的组合应该只是结果。
Foundation PHP
&
Foundation WORDPRESS
不会出现。这个答案只会返回
ID
值,不是名称,因为它不清楚您将结果投影到的视图模型是什么-例如,如果过滤器是
{1,2}
,则结果将是
MainCourseName:3,CourseCombination:“1,2”
。我可以修改它显示名字,一旦你的happy返回你期望的值。是的……得到了正确的答案,伙计。如果可能的话,请修改它显示名字。更新了答案。如果我正确地解释了你的模型,它现在应该给你
CourseCode:“文凭”,CourseCombination:“PHP,WORDPRESS”
如果过滤器是
{1,2}
,如果可能的话,请研究一下这个问题@ksg,我倾向于同意Scott Chamberlain的评论。如果要创建数字,请在触发器中执行,但仅与插入操作关联。虽然我不明白为什么它们需要顺序-它们应该是唯一的。如果发票被删除,你就会遇到问题。