방법: 새 형식 프로젝션(LINQ to XML)
업데이트: November 2007
이 단원의 다른 예제에서는 XElement의 IEnumerable<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