Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Other examples in this section have shown queries that return results as IEnumerable<T> of XElement, IEnumerable<T> of string, and IEnumerable<T> of int. These are common result types, but they are not appropriate for every scenario. In many cases you will want your queries to return an IEnumerable<T> of some other type.
Example
This example shows how to instantiate objects in the select clause. The code first defines a new class with a constructor, and then modifies the select statement so that the expression is a new instance of the new class.
This example uses the following XML document: Sample XML File: Typical Purchase Order (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
This example uses the M:System.Xml.Linq.XElement.Element method that was introduced in the topic How to: Retrieve a Single Child Element (LINQ to XML). It also uses casts to retrieve the values of the elements that are returned by the M:System.Xml.Linq.XElement.Element method.
This example produces the following output:
Lawnmower:1
Baby Monitor:2