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

Выберите новую комбинацию ключевых слов

В LINQ, что делает комбинация ключевых слов select new?

Я не нашел много документации по этому вопросу.

Спасибо

4b9b3361

Ответ 1

Используя select new, вы можете использовать данные или объекты из набора, с которым работаете, для создания новых объектов, либо набрав анонимно или обычно.


1. Использование select new для возврата новых анонимно типизированных объектов:

var records = from person in people
              select new { person.name, person.id };

Для создания набора анонимно типизированных объектов используется ключевое слово new. Новый тип объекта просто создается компилятором с двумя свойствами. Если вы посмотрите на тип объекта в отладчике, вы увидите, что у него есть сумасшедшее, автогенерированное имя типа. Но вы также можете использовать ключевое слово new так же, как и вы, за пределами linq:


2. Используя select new для создания "регулярно" типизированных объектов:

var records = from person in people
              select new CreditRecord(person.creditLimit, person.name);

В этом примере используется ключевое слово new так же, как вы привыкли - для создания некоторого известного типа объекта через один из его конструкторов.

Select называется оператором преобразования (или проекции). Он позволяет вам поместить данные в набор, с которым вы работаете, через функцию преобразования, чтобы дать вам новый объект с другой стороны. В приведенных выше примерах мы просто "трансформируем" объект человека в какой-то другой тип, выбирая только определенные свойства объекта-человека и делая с ними что-то. Таким образом, комбинация select new ... действительно просто указывает операцию new как функцию преобразования оператора select. Это может иметь большее значение с помощью встречного примера для двух предыдущих:


3. Используя select без new, без преобразования

Конечно, вам не нужно использовать select и new вместе. Возьмите этот пример:

var someJohns =  from person in people
                 where person.name == "John"
                 select person;

Это возвращает исходный тип объекта, который был в комплекте, с которым вы работали, - без преобразования и создания нового объекта.


4. Используя select без new, с преобразованием

И, наконец, преобразование без ключевого слова new:

var personFoods = from person in people
                  select person.GetFavoriteFoods();

который возвращает вам новый тип объекта, созданный из функции преобразования, а не напрямую с помощью ключевого слова new для его создания.

Ответ 2

Это ключевое слово select, за которым следует выражение new, возможно создающее анонимный тип.

Другими словами, это комбинация следующих двух несвязанных выражений:

select

from a in whatever select 2

Анонимные типы

new { Prop1 = 3, Prop2 = DateTime.Now }

Ответ 3

На самом деле это не комбинация, new просто создает анонимный тип для возврата значения. В противном случае вам придется работать со словарями/массивами и т.д. (Как в PHP), который всегда уродлив.

var q = 
    from staff in theWhiteHouseStaff
    select new { Name = staff.Name } ;