Несколько элементов в .Select () - PullRequest
0 голосов
/ 05 мая 2020

Это, наверное, простая вещь, но по какой-то причине я не могу найти решение.

Допустим, у меня есть набор спецификаций типа c, лучший пример - Person. И я хочу взять только FirstName, LastName и Age, а остальные проигнорировать.

До сих пор я пробовал:

var list2 = list1.Select(x => { x.FirstName; x.LastName; x.Age });
var list2 = list1.Select(x => new { x.FirstName, x.LastName, x.Age });

Но он даже не компилируется.

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Ваш второй пример работает нормально:

    cs.Select(x => new { x.FirstName, x.LastName, x.Age });

Еще лучший способ - использовать кортеж значений, они используют меньше памяти и их намного проще собирать мусор (меньше корней):

    cs.Select(x => (x.FirstName, x.LastName, x.Age));

Онлайн-справочник

0 голосов
/ 05 мая 2020

Судя по вашим комментариям, похоже, что вы хотите удалить некоторые свойства из своих Person объектов, выбрав лишь некоторые из них.

Это один из способов сделать это:

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

    // This property will be stripped
    public string OtherProperty { get; set; }

    public override string ToString()
    {
        return $"{nameof(FirstName)}: {FirstName}, {nameof(LastName)}: {LastName}, {nameof(Age)}: {Age}, {nameof(OtherProperty)}: {OtherProperty}";
    }
}

internal class Program
{
    static IEnumerable<Person> StrippedPersons(IEnumerable<Person> source)
    {
        // Selects only some of the properties that you want to return
        return source.Select(x => new Person
        {
            FirstName = x.FirstName, 
            LastName = x.LastName, 
            Age = x.Age
        });
    }

    private static void Main(string[] args)
    {
        var list1 = new List<Person>()
        {
            new Person
            {
                Age = 10,
                FirstName = "First",
                LastName = "Last",
                OtherProperty = "THIS WILL BE DISCARDED"
            }
        };

        Console.WriteLine(string.Join("\n", list1));

        var list2 = StrippedPerson(list1).ToList();

        Console.WriteLine(string.Join("\n", list2));
    }
}

Результат:

Имя: Имя: Имя, Фамилия: Фамилия, Возраст: 10, Другое Свойство: ЭТО БУДЕТ ОТКЛЮЧЕНО

Имя: Имя: Имя: Фамилия: Фамилия, Возраст : 10, OtherProperty:

Если вы хотите, чтобы это было как-то динамично, c в том смысле, что вы хотите передать имя необходимых свойств в качестве параметра вашему методу вместо того, чтобы иметь их жестко запрограммированы, нам может потребоваться использовать отражение, и лучше отредактировать ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...