LINQ中的嵌套选择语句

3
我有以下模型:
许多专业的学校 许多提供的学位的专业(或简称为学位)。
+------+--------+--------+
|School| Major  | Degree |
+------+--------+--------+
| UCLA |CompSci | B      |
| UCLA |CompSci | M      |
| UCLA |CompSci | D      |
| UCLA |Math    | B      |
+------+--------+--------+

我希望能够按专业分组检索某所学校提供的所有学位(因此不需要为返回的每个学位重复列出专业)。 我该怎么做呢? 到目前为止,我有以下代码,但现在遇到了困难。

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

我不太确定如何返回每个不同专业的度数。
3个回答

2
我能通过查看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)
          } )
      };

非常感谢大家。

1

只需使用 Group By

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

1

以下这个怎么样?

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<string> 并添加一个 GroupBy 调用。

嗨亚当,谢谢你的回复。这个方法非常接近我想要的结果,因为我能够获取到学校的所有不同专业。但是我还有一个问题,我希望返回类似于[UCLA],[[计算机科学],[学士,硕士,博士]]这样的结果。我不明白如何在获取到不同专业后返回不同的学位信息。 - khaihon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接