Как получить массив значений различных свойств из списков памяти?
-
09-06-2019 - |
Вопрос
У меня есть список 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();