2012-01-20 165 views
2

我有以下模式:与许多专业 专业与许多参团度嵌套选择在LINQ

学校(或只是度短)。

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

我不太确定我知道如何返回每个不同专业的学位。

回答

1

我能够通过检查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

简单地进行组通过

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电话。

+0

嗨,亚当,谢谢你。由于我能够为学校获得所有不同的专业,这变得非常接近。我仍然难倒的地方是我想返回像[UCLA],[[Computer Science],[B,M,D]]。我不知道该怎么做,是在找回不同的专业后返回不同的学位。 – khaihon