Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En algunos casos, es posible que quiera proyectar una consulta en un nuevo tipo, aunque la consulta sería el único uso del nuevo tipo. En lugar de crear el tipo, puede proyectar en un tipo anónimo. Los tipos anónimos ofrecen una manera cómoda de encapsular un conjunto de propiedades de solo lectura en un objeto sin tener que definir primero un tipo explícitamente. Si escribe una consulta que crea un objeto de un tipo anónimo en la cláusula select
, la consulta devuelve un elemento IEnumerable del tipo.
En el ejemplo siguiente se muestra la creación de un objeto de un tipo anónimo que se inicializa con dos propiedades, Amount
y Message
.
var v = new { Amount = 108, Message = "Hello" };
Dim v = New With { .Amount = 108, .Message = "Hello" };
El compilador deduce el tipo de cada propiedad. El compilador genera el nombre del tipo, que no está disponible en el nivel de código fuente.
Para obtener más información sobre los tipos anónimos, vea:
Ejemplo: Proyección de un tipo anónimo mediante la creación de objetos en la cláusula select
En este ejemplo, la cláusula select
proyecta un tipo anónimo. A continuación, el ejemplo utiliza var
para crear el objeto IEnumerable
. En el bucle foreach
, la variable de iteración se convierte en una instancia del tipo anónimo creado en la expresión de consulta.
En este ejemplo se usa el documento XML Archivo XML de ejemplo: clientes y pedidos.
XElement custOrd = XElement.Load("CustomersOrders.xml");
var custList =
from el in custOrd.Element("Customers").Elements("Customer")
select new {
CustomerID = (string)el.Attribute("CustomerID"),
CompanyName = (string)el.Element("CompanyName"),
ContactName = (string)el.Element("ContactName")
};
foreach (var cust in custList)
Console.WriteLine("{0}:{1}:{2}", cust.CustomerID, cust.CompanyName, cust.ContactName);
Dim custOrd As XElement = XElement.Load("CustomersOrders.xml")
Dim custList = _
From el In custOrd.<Customers>.<Customer> _
Select New With { _
.CustomerID = el.@<CustomerID>, _
.CompanyName = el.<CompanyName>.Value, _
.ContactName = el.<ContactName>.Value _
}
For Each cust In custList
Console.WriteLine("{0}:{1}:{2}", cust.CustomerID, cust.CompanyName, cust.ContactName)
Next
Este ejemplo produce el siguiente resultado:
GREAL:Great Lakes Food Market:Howard Snyder
HUNGC:Hungry Coyote Import Store:Yoshi Latimer
LAZYK:Lazy K Kountry Store:John Steel
LETSS:Let's Stop N Shop:Jaime Yorres