关于c#:使用linq distinct函数?

Use linq distinct function?

本问题已经有最佳答案,请猛点这里访问。

如何使用linq distinct运算符删除重复的coures.cours.name,

1
2
3
4
5
6
7
var coursesList = from courses in not_subsribe
  select new SelectListItem
  {
      Text = courses.Cours.Name,
      Value = courses.Cours.ID
      .ToString()
  };


您可以对具有这两个属性的匿名类型使用GroupBy,使其与众不同:

1
2
3
4
5
6
7
8
9
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
     };

这是因为匿名类型会自动覆盖EqualsGetHashCode,满足GroupByDistinct的需要。所以现在您也可以使用Distinct

1
2
3
4
5
6
7
8
9
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
     });


你可以使用:

1
2
3
4
5
6
var coursesList = courses.DistinctBy(c => courses.Cours.Name)
                         .Select(crs => new SelectListItem
                                          {
                                              Text = crs.Cours.Name,
                                              Value = crs.Cours.ID.ToString()
                                          });

对不起,我忘了提一下,DistinctBy方法可在名为morelinq的第三方库中使用。此库可使用nuget package manager从以下位置下载:http://www.nuget.org/packages/morelinq/

你可以在这里找到更多关于morelinq的信息:https://code.google.com/p/morelinq/