Как присоединиться к общему списку объектов по определенному свойству
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
List<Person> theList = populate it with a list of Person objects
Как я могу получить строку, которая содержит все FirstName из объектов в списке, разделенных запятой. Например:
Джон, Питер, Джек
Базовым решением было бы итерацию по каждому объекту, но я уверен, что есть однострочное решение.
Спасибо.
Ответы
Ответ 1
Обновление (с .NET 4)
string.Join
теперь имеет перегрузку, которая принимает IEnumerable<string>
- yay!
string.Join(",", theList.Select(p => p.FirstName));
Для версий .NET ниже 4.0 (старше):
string.Join(",", theList.ConvertAll(person => person.FirstName).ToArray());
Разделите его на составные части:
List<T>.ConvertAll
преобразует a List<T>
в другой тип - в этом случае a List<string>
.
ToArray()
преобразует List<string>
в string[]
.
string.Join()
записывает массив строк (второй параметр) как одну строку, разделенную первым параметром.
Ответ 2
Вы также можете использовать метод расширения запроса
string output = theList.Select(p => p.FirstName).Aggregate((progress, next) => progress + ", " + next);
Это позволит избежать создания массива.