다음을 통해 공유


방법: 새 형식 프로젝션(LINQ to XML)

업데이트: November 2007

이 단원의 다른 예제에서는 XElementIEnumerable<T>, string의 IEnumerable<T> 및 int의 IEnumerable<T>로 결과를 반환하는 쿼리를 보여 줍니다. 이러한 결과 형식이 일반적이지만 모든 시나리오에 적합하지는 아닙니다. 대부분의 경우 다른 형식의 IEnumerable<T>을 반환하는 쿼리를 작성하려고 할 수 있습니다.

예제

이 예제에서는 select 절에서 개체를 인스턴스화하는 방법을 보여 줍니다. 이 코드에서는 먼저 생성자를 사용하여 새 클래스를 정의한 다음 식이 새 클래스의 새 인스턴스이도록 select 문을 수정합니다.

이 예제에서는 XML 문서로 샘플 XML 파일: 일반적인 구매 주문(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

이 예제에서는 방법: 단일 자식 요소 검색(LINQ to XML) 항목에 도입된 M:System.Xml.Linq.XElement.Element 메서드를 사용합니다. 또한, 캐스트를 사용하여 M:System.Xml.Linq.XElement.Element 메서드에서 반환하는 요소의 값을 검색합니다.

이 예제의 결과는 다음과 같습니다.

Lawnmower:1
Baby Monitor:2

참고 항목

개념

프로젝션 및 변환(LINQ to XML)