Aracılığıyla paylaş


How to: Project a New Type (LINQ to XML)

Other examples in this section have shown queries that return results as IEnumerable of XElement, IEnumerable of string, and IEnumerable 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 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

See Also

Concepts

Projections and Transformations (LINQ to XML)