En LINQ, ¿qué significa la combinación de palabras clave select new
?Seleccione una nueva combinación de palabras clave
No he encontrado mucha documentación sobre esto.
Gracias
En LINQ, ¿qué significa la combinación de palabras clave select new
?Seleccione una nueva combinación de palabras clave
No he encontrado mucha documentación sobre esto.
Gracias
Al usar select new
, se pueden utilizar los datos u objetos en el juego que se está trabajando para crear nuevos objetos, ya sea escrito o anonymously normalmente.
1. Usando select new
regresar nuevos objetos de forma anónima proporcionado:
var records = from person in people
select new { person.name, person.id };
Este utiliza la palabra clave new
para crear un conjunto de objetos de forma anónima mecanografiadas. El compilador simplemente crea un nuevo tipo de objeto con dos propiedades. Si observa el tipo de objeto en el depurador, verá que tiene un nombre de tipo autogenerado y de aspecto loco. Pero también se puede utilizar la palabra clave new
al igual que usted está acostumbrado a las afueras de LINQ:
2. Usando select new
para construir "regular" objetos proporcionado:
var records = from person in people
select new CreditRecord(person.creditLimit, person.name);
En este ejemplo se utiliza la new
palabra clave tal como está acostumbrado: para construir algún tipo conocido de objeto a través de uno de sus constructores.
Seleccionar se llama operador de transformación (o proyección). Le permite poner los datos en el conjunto con el que está trabajando a través de una función de transformación, para darle un nuevo objeto en el otro lado. En los ejemplos anteriores, simplemente estamos "transformando" el objeto de persona en otro tipo eligiendo solo las propiedades específicas del objeto de persona y haciendo algo con ellos. Por lo tanto, la combinación de select new ...
realmente solo especifica la operación new
como la función de transformación de la instrucción select
. Eso podría tener más sentido con un ejemplo en contra de los dos anteriores:
3. Usando select
sin new
, sin transformación
Por supuesto que no es necesario utilizar select
y new
juntos. Tome este ejemplo:
var someJohns = from person in people
where person.name == "John"
select person;
Esto le devuelve el tipo de objeto original que estaba en el set que estaba trabajando - ninguna transformación, y no hay nueva creación de objetos.
4.Usando select
sin new
, con una transformación
Y, por último, una transformación sin la new
palabra clave:
var personFoods = from person in people
select person.GetFavoriteFoods();
que le da la espalda algún nuevo tipo de objeto, generado a partir de la función de transformación y no utilizando directamente la palabra clave new
para construirlo.
Es la palabra clave select
seguida de una expresión new
, probablemente creando un anonymous type.
En otras palabras, es una combinación de las siguientes dos expresiones relacionadas:
select
from a in whatever select 2
new { Prop1 = 3, Prop2 = DateTime.Now }
no es realmente una combinación, new
sólo crea un tipo anónimo para devolver el valor De lo contrario, tendría que trabajar con Diccionarios/Matrices, etc. (como en PHP) que siempre es feo.
var q =
from staff in theWhiteHouseStaff
select new { Name = staff.Name } ;