Linq - 从列表中获取x个不同的项目

时间:2013-12-17 16:46:24

标签: c# linq

我需要使用某个属性显示对象列表中的前4个元素。我只想显示前四个“Distinct”元素。因此,举例来说,如果我有一个'Car'列表,那么Car对象有一个名为'Color'的属性作为字符串,列表如下所示:

  Car: red;
  Car: red;
  Car: blue;
  Car: green;
  Car: green;
  Car: orange;
  Car: purple;

然后我希望代码在这种情况下打印出前四个不同的元素“红色,蓝色,绿色,橙色”。

到目前为止,我有以下几点:

  String.Join("," ,cars.Take(4).Distinct().Select(a => String.Format("{0}", a.Color)));

3 个答案:

答案 0 :(得分:5)

尝试拨打Select,然后Distinct,然后Take

String.Join(",", cars.Select(a => a.Color).Distinct().Take(4)));

此外,string.Join会为您调用ToString,因此您无需使用String.Format(除非您确实需要专门格式化字符串)。

答案 1 :(得分:1)

您需要先Distinct然后Take(4)

String.Join("," ,cars.Distinct().Take(4).Select(a => String.Format("{0}", a.Color)));

如果您的对象有更多属性,那么您可以这样做:

String.Join("," ,cars.Select(r=> r.Color).Distinct().Take(4).Select(a =>a.Color));

答案 2 :(得分:0)

我不认为Distinct()适用于没有正确设置相等比较器的汽车。 所以,我想,正确答案将是:

cars.Select(x => x.Color).Distinct().Take(4);