Подтвердить что ты не робот

Сбор в строку с использованием linq

У меня есть класс

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }   
}

List<Person> PersonList = new List<Perso>();
PersonList.Add(new Person() { FirstName = "aa", LastName = "AA" } );
PersonList.Add(new Person() { FirstName = "bb", LastName = "BB" } );

Я хотел бы получить строку с разделителем запятой для LastName, используя Linq, результат будет выглядеть так: AA, BB

Спасибо,

4b9b3361

Ответ 1

Если вы используете .NET 4:

string lastNames = string.Join(",", PersonList.Select(x => x.LastName));

Если вы используете .NET 3.5:

string lastNames = string.Join(",", PersonList.Select(x => x.LastName)
                                              .ToArray());

(В основном у .NET 4 были дополнительные перегрузки, добавленные в string.Join.)

Ответ 2

Чтобы объединить строковые элементы с разделителями, вы можете использовать String.Join

В .NET 3.5 и ниже это берет массив как второй параметр, но в 4.0 он имеет перегрузку, которая принимает IEnumerable<T>, где T в этом случае String.

Вооружившись этой информацией, введите код, который вы хотите.

Для .NET 3.5:

string result = String.Join(", ",
    (from p in PersonList
     select p.LastName).ToArray());

Для .NET 4.0 вы можете опустить вызов ToArray:

string result = String.Join(", ",
    from p in PersonList
    select p.LastName);

Если вы хотите отказаться от LINQ-синтаксиса и просто использовать методы расширения LINQ, здесь то же самое в этом варианте:

Для .NET 3.5:

string result = String.Join(", ", PersonList.Select(p => p.LastName).ToArray());

Для .NET 4.0 вы можете опустить вызов ToArray:

string result = String.Join(", ", PersonList.Select(p => p.LastName));

Примечание: 3.5 варианта выше, конечно, работают и в 4.0, они не удалили или не заменили старый метод, они просто добавили один для типичного случая.

Ответ 3

Вы можете использовать

PersonList.Select(p => p.LastName).Aggregate((s1,s2) => s1 + ", " + s2);