다음을 통해 공유


방법: 복잡한 필터링을 사용하여 쿼리 작성

복잡한 필터를 사용하여 LINQ to XML 쿼리를 작성하려는 경우가 있습니다. 예를 들어, 특정 이름과 값을 가진 자식 요소가 있는 모든 요소를 찾으려고 할 수 있습니다. 이 항목에서는 복잡한 필터링을 사용하여 쿼리를 작성하는 예제를 제공합니다.

예제

이 예제에서는 Type 특성이 "Shipping"과 같고 자식 State 요소가 "NY"와 같은 자식 Address 요소가 있는 모든 PurchaseOrder 요소를 찾는 방법을 보여 줍니다. 이 예제에서는 Where 절에서 중첩 쿼리를 사용하며, Any 연산자는 컬렉션에 요소가 있는 경우 true를 반환합니다. 메서드 기반 쿼리 구문을 사용하는 방법에 대한 자세한 내용은 LINQ 쿼리 구문과 메서드 구문 비교(C#)를 참조하십시오.

이 예제에서는 XML 문서로 샘플 XML 파일: 여러 구매 주문(LINQ to XML)을 사용합니다.

Any 연산자에 대한 자세한 내용은 수량자 작업을 참조하십시오.

XElement root = XElement.Load("PurchaseOrders.xml");
IEnumerable<XElement> purchaseOrders =
    from el in root.Elements("PurchaseOrder")
    where 
        (from add in el.Elements("Address")
        where
            (string)add.Attribute("Type") == "Shipping" &&
            (string)add.Element("State") == "NY"
        select add)
        .Any()
    select el;
foreach (XElement el in purchaseOrders)
    Console.WriteLine((string)el.Attribute("PurchaseOrderNumber"));
Dim root As XElement = XElement.Load("PurchaseOrders.xml")
Dim purchaseOrders As IEnumerable(Of XElement) = _
    From el In root.<PurchaseOrder> _
    Where _
        (From add In el.<Address> _
        Where _
             add.@Type = "Shipping" And _
             add.<State>.Value = "NY" _
        Select add) _
    .Any() _
    Select el
For Each el As XElement In purchaseOrders
    Console.WriteLine(el.@PurchaseOrderNumber)
Next

이 코드는 다음과 같이 출력됩니다.

99505

다음 예제에서는 네임스페이스에 있는 XML에 대한 동일한 쿼리를 보여 줍니다. 자세한 내용은 XML 네임스페이스 작업을 참조하십시오.

이 예제에서는 XML 문서로 샘플 XML 파일: 네임스페이스의 여러 구매 주문을 사용합니다.

XElement root = XElement.Load("PurchaseOrdersInNamespace.xml");
XNamespace aw = "https://www.adventure-works.com";
IEnumerable<XElement> purchaseOrders =
    from el in root.Elements(aw + "PurchaseOrder")
    where
        (from add in el.Elements(aw + "Address")
         where
             (string)add.Attribute(aw + "Type") == "Shipping" &&
             (string)add.Element(aw + "State") == "NY"
         select add)
        .Any()
    select el;
foreach (XElement el in purchaseOrders)
    Console.WriteLine((string)el.Attribute(aw + "PurchaseOrderNumber"));
Imports <xmlns:aw='https://www.adventure-works.com'>

Module Module1
    Sub Main()
        Dim root As XElement = XElement.Load("PurchaseOrdersInNamespace.xml")
        Dim purchaseOrders As IEnumerable(Of XElement) = _
            From el In root.<aw:PurchaseOrder> _
            Where _
                (From add In el.<aw:Address> _
                Where _
                     add.@aw:Type = "Shipping" And _
                     add.<aw:State>.Value = "NY" _
                Select add) _
            .Any() _
            Select el
        For Each el As XElement In purchaseOrders
            Console.WriteLine(el.@aw:PurchaseOrderNumber)
        Next
    End Sub
End Module

이 코드는 다음과 같이 출력됩니다.

99505

참고 항목

참조

XML 자식 축 속성(Visual Basic)

XML 특성 축 속성(Visual Basic)

XML Value 속성(Visual Basic)

Attribute

Elements

개념

기본 쿼리(LINQ to XML)

수량자 작업

프로젝션 작업