2013-12-17 5 views
1

Мне нужно показать первые 4 элемента в списке объектов с использованием определенного свойства. Однако я хочу показать только первые четыре «отличительных» элемента. Так, например, если у меня есть список «Car» позволяет говорить и объект Car имеет свойство «Color» в виде строки и список выглядит примерно так:Linq - Возьмите x-количество отдельных элементов из списка

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))); 

ответ

5

Попробуйте позвонить Select, затем Distinct, затем Take:

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

Кроме того, string.Join будем называть ToString для вас, чтобы вы не» t нужно использовать String.Format (если вам не нужно специально форматировать строку).

+0

Я оправдываю причину, по которой я не сделал свой пример достаточно подробным. Представьте, что мой объект автомобиля также имеет другие свойства, которые в значительной степени сделают список отличным, как есть. То, что я сделал, это что-то вроде: String.Join («,», cars.Select (a => a.Color) .Distinct(). Take (4)); Вы привели меня к моему ответу, хотя так спасибо, я приму этот ответ, когда смогу. :) – TMan

+0

@TMan Я вижу, да, это немного изменит ситуацию. Я обновил свой ответ соответственно. –

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)); 
0

Я не думаю, что Distinct() будет работать для автомобилей без правильно установить равенство. Итак, я думаю, правильный ответ будет:

cars.Select(x => x.Color).Distinct().Take(4); 
Смежные вопросы