C# LINQ中的嵌套选择

C# LINQ中的嵌套选择,c#,linq,entity-framework,C#,Linq,Entity Framework,我有以下型号: 多专业学校 拥有多个学位(或简称学位)的专业 我想检索一所学校提供的所有学位,按专业分组(因此返回的每个学位都不会重复专业)。我该怎么做?到目前为止,我有以下代码,但现在我被卡住了 var query = from school in schools where school.Id == Id select new { name = s.Name

我有以下型号:

多专业学校 拥有多个学位(或简称学位)的专业

我想检索一所学校提供的所有学位,按专业分组(因此返回的每个学位都不会重复专业)。我该怎么做?到目前为止,我有以下代码,但现在我被卡住了

var query = from school in schools
            where school.Id == Id
            select new
            {
                name   = s.Name
                majors = (from major in school.Majors
                         select new
                         {
                             majorname = major.Name
                         }).Distinct()
            };
我不太确定我是否知道如何返回每个不同专业的学位。

只需根据

var groupedBy= list.Where(c=> c.Id==Id).GroupBy(c=> c.Major);
foreach(var item in groupedBy )
{
 var v=item.Select(c=> new {Major=item.Key,Degree=c.Degree });
}

下面呢

var query = schools
    .Where(school => school.Id == Id)
    .Select(school => new
        {
            Name = school.Name,
            Majors = school.Majors.Select(major => major.Name).Distinct()
        })
    .GroupBy(obj => obj.Majors);

除了删除查询语法之外,对代码的唯一更改是将
Majors
字段更改为
IEnumerable
,并添加
GroupBy
调用。

我可以通过检查SO上的类似情况并使用group/by/into关键字来解决这个问题

 var query = from school in schools
      where school.Id == id
      select new
      {
       name = school.Name,
       majors = ( from major in school.Majors
          group major.Degree by major.Name into sub
          select new
          {
           m = sub.Key,
           d = (from degree in sub
             select degree.Name)
          } )
      };

非常感谢大家。

嗨,亚当,谢谢大家。这一点非常接近,因为我能够获得学校所有不同的专业。我仍然感到困惑的是,我想返回像[加州大学洛杉矶分校],[计算机科学],[工商管理学院]。我不知道如何在检索不同的专业后返回不同的学位。
 var query = from school in schools
      where school.Id == id
      select new
      {
       name = school.Name,
       majors = ( from major in school.Majors
          group major.Degree by major.Name into sub
          select new
          {
           m = sub.Key,
           d = (from degree in sub
             select degree.Name)
          } )
      };