2010-02-14 19 views

Respuesta

22

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.

1

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 

Anonymous types

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

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 } ; 
Cuestiones relacionadas