使用linq不同的功能?

时间:2014-03-10 07:28:55

标签: c# linq

如何在此处使用linq distinct运算符删除重复的course.Cours.Name,

var coursesList = from courses in not_subsribe
  select new SelectListItem
  {
      Text = courses.Cours.Name,
      Value = courses.Cours.ID
      .ToString()
  };

2 个答案:

答案 0 :(得分:0)

您可以使用:

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/

答案 1 :(得分:0)

您可以在具有两个属性的匿名类型上使用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
     };

这是有效的,因为匿名类型会为EqualsGetHashCode自动覆盖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
     });