Compartir a través de


Procedimiento para proyectar un tipo anónimo (LINQ to XML)

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

Vea también