Como: Um projeto novo tipo (LINQ te o XML)
Outros exemplos nesta seção mostraram consultas que os resultados de retorno como IEnumerable de XElement, IEnumerable de string, e IEnumerable de int. Esses são tipos comuns de resultado, mas não são adequados para cada cenário. Em muitos casos você desejará suas consultas para retornar IEnumerable de qualquer outro tipo.
Exemplo
Este exemplo mostra como instanciar objetos na cláusula select . O código define primeiro uma nova classe com um construtor, e altera a declaração de select de modo que a expressão é uma nova instância da nova classe.
Este exemplo usa o seguinte documento XML: Arquivo XML de exemplo: ordem de compra típica (LINQ to XML).
class NameQty {
public string name;
public int qty;
public NameQty(string n, int q)
{
name = n;
qty = q;
}
};
class Program {
public static void Main() {
XElement po = XElement.Load("PurchaseOrder.xml");
IEnumerable<NameQty> nqList =
from n in po.Descendants("Item")
select new NameQty(
(string)n.Element("ProductName"),
(int)n.Element("Quantity")
);
foreach (NameQty n in nqList)
Console.WriteLine(n.name + ":" + n.qty);
}
}
Public Class NameQty
Public name As String
Public qty As Integer
Public Sub New(ByVal n As String, ByVal q As Integer)
name = n
qty = q
End Sub
End Class
Public Class Program
Shared Sub Main()
Dim po As XElement = XElement.Load("PurchaseOrder.xml")
Dim nqList As IEnumerable(Of NameQty) = _
From n In po...<Item> _
Select New NameQty( _
n.<ProductName>.Value, CInt(n.<Quantity>.Value))
For Each n As NameQty In nqList
Console.WriteLine(n.name & ":" & n.qty)
Next
End Sub
End Class
Este exemplo usa o método de M:System.Xml.Linq.XElement.Element que foi introduzido no tópico Como recuperar um único elemento filho (LINQ to XML). Também usa conversões para recuperar os valores dos elementos que são retornados pelo método de M:System.Xml.Linq.XElement.Element .
Este exemplo gera a seguinte saída:
Lawnmower:1
Baby Monitor:2