Как получить массив значений различных свойств из списков памяти?

StackOverflow https://stackoverflow.com/questions/40465

Вопрос

У меня есть список Foo.

Foo имеет строковое свойство с именем Bar.

Я хотел бы использовать LINQ , чтобы получить строку [] из различных значений для Foo.Bar в списке Foo.

Как я могу это сделать?

Это было полезно?

Решение

Я бы пошел на лямбды ... да еще приятнее

var bars = Foos.Select(f => f.Bar).Distinct().ToArray();

работает так же, как и сообщение @lassevk.

Я также добавил бы, что вы можете не преобразовывать в массив до последней минуты.

LINQ выполняет некоторые оптимизации за кулисами, запросы остаются в форме запросов до тех пор, пока они не потребуются явно. Таким образом, вы, возможно, захотите сначала встроить в запрос все, что вам нужно, чтобы любая возможная оптимизация применялась в целом.

Под оценкой я имею в виду запрос чего-то, что явно требует оценки, например " Count () " или "ToArray ()" и др.

Другие советы

Это должно работать, если вы хотите использовать беглый шаблон:

string[] arrayStrings = fooList.Select(a => a.Bar).Distinct().ToArray();

Попробуйте это:

var distinctFooBars = (from foo in foos
                       select foo.Bar).Distinct().ToArray();

Разве вы не сможете сделать что-то вроде:

var strings = (from a in fooList select a.Bar).Distinct();
string[] array = strings.ToArray();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top