使用linq独特的功能?
这个问题在这里已经有了答案:
  您可以在具有两种属性的匿名类型上使用GroupBy ,以使它们不同: 
var coursesList = 
     from c in not_subsribe
     group c by new { Id = c.Cours.ID, Name = c.Cours.Name } into g
     order by g.Key.Name
     select new SelectListItem
     {
         Text = g.Key.Name,
         Value = g.Key.Id
     };
  这是有效的,因为匿名类型会自动覆盖Equals + GetHashCode为您提供GroupBy或Distinct所需的内容。  所以现在你也可以使用Distinct : 
var coursesList = not_subsribe
.Select(c => new { Id = c.Cours.ID, Name = c.Cours.Name })
.Distinct()
.OrderBy(x => x.Name)
.Select(x => new SelectListItem
     {
         Text = g.Key.Name,
         Value = g.Key.Id
     }); 
您可以使用:
var coursesList = courses.DistinctBy(c => courses.Cours.Name)
                         .Select(crs => new SelectListItem
                                          {
                                              Text = crs.Cours.Name,
                                              Value = crs.Cours.ID.ToString()
                                          });
  对不起,我忘记提到DistinctBy方法在称为MoreLINQ的第三方库中可用 。  这个库可以从这里下载使用Nuget包管理器:http://www.nuget.org/packages/morelinq/ 
你可以从这里找到更多关于MoreLINQ的信息:https://code.google.com/p/morelinq/
链接地址: http://www.djcxy.com/p/51297.html