在Linq中的viewmodel中连接一个列表?

时间:2015-10-09 13:17:29

标签: linq asp.net-mvc-4 lambda

Dbstructure

  • CourseTable

    Id       Name     
    
    1        Linux
    2        Apache
    3        MySql
    4        Python
    
  • MultiCourseTable

    Id       Name      
    1        LAMP
    
  • MultiCourseDetailsTable

     Id      MultiCourseId     CourseId   
     1           1               1
     2           1               2
     3           1               3
     4           1               4
    

Ouptut View应

    Name      Courses  
    LAMP      Linux,Apache,MySql,Python

如何使用Linq实现上述功能。我尝试过以下但未能得到理想的结果。

 var _dTableMultiCourse = _db.MultiCourses
                                    .Where(x => Id == 0 || x.Id == Id)
                                    .AsEnumerable()
                                    .Select(x => new
                                    {
                                        SlNo = "",
                                        Title = x.CourseSubTitle.Name,
                                        Courses = x.MultiCourseDetails
                                                 .Select(m=>m.Course.Name)
                                                 .Join(','),                                          
                                        Id = x.Id
                                    });

2 个答案:

答案 0 :(得分:0)

可枚举上的

.Joinstring.Join完全不同,这是您正在寻找的内容。

Courses = string.Join(",", x.MultiCourseDetails.Select(m => m.Course.Name))

答案 1 :(得分:0)

以下查询适用于我的示例:

var res = multiCourseDetails.GroupBy(k => k.MultiCourseID)
            .Select(t => new
            {
                Name = multiCourses
                    .FirstOrDefault(q => q.MultiCourseID == t.Key).Name,
                Courses = string.Join(", ", t.Join(courses, q => q.CourseID, w => w.CourseID, (r, y) => y.Name))
            });

我使用的集合的名称与您在问题中发布的表格相关。