none
Join two collection from xml RRS feed

  • Question

  • i was reading a write up from this url https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/how-to-join-two-collections-linq-to-xml

    https://www.c-sharpcorner.com/blogs/joins-using-linqtoxml1

    XmlSchemaSet schemas = new XmlSchemaSet();  
    schemas.Add("", "CustomersOrders.xsd");  
      
    Console.Write("Attempting to validate, ");  
    XDocument custOrdDoc = XDocument.Load("CustomersOrders.xml");  
      
    bool errors = false;  
    custOrdDoc.Validate(schemas, (o, e) =>  
                         {  
                             Console.WriteLine("{0}", e.Message);  
                             errors = true;  
                         });  
    Console.WriteLine("custOrdDoc {0}", errors ? "did not validate" : "validated");  
      
    if (!errors)  
    {  
        // Join customers and orders, and create a new XML document with  
        // a different shape.  
      
        // The new document contains orders only for customers with a  
        // CustomerID > 'K'  
        XElement custOrd = custOrdDoc.Element("Root");  
        XElement newCustOrd = new XElement("Root",  
            from c in custOrd.Element("Customers").Elements("Customer")  
            join o in custOrd.Element("Orders").Elements("Order")  
                       on (string)c.Attribute("CustomerID") equals  
                          (string)o.Element("CustomerID")  
            where ((string)c.Attribute("CustomerID")).CompareTo("K") > 0  
            select new XElement("Order",  
                new XElement("CustomerID", (string)c.Attribute("CustomerID")),  
                new XElement("CompanyName", (string)c.Element("CompanyName")),  
                new XElement("ContactName", (string)c.Element("ContactName")),  
                new XElement("EmployeeID", (string)o.Element("EmployeeID")),  
                new XElement("OrderDate", (DateTime)o.Element("OrderDate"))  
            )  
        );  
        Console.WriteLine(newCustOrd);  
    }  

    i do not understand this line 

    where ((string)c.Attribute("CustomerID")).CompareTo("K") > 0  

    what CompareTo("K") will do ? please help me to understand this

    if i comment this line where ((string)c.Attribute("CustomerID")).CompareTo("K") > 0  then what will happen ?

    the customer and order xml as follows

    <?xml version="1.0" encoding="utf-8"?>  
    <Root>  
      <Customers>  
        <Customer CustomerID="GREAL">  
          <CompanyName>Great Lakes Food Market</CompanyName>  
          <ContactName>Howard Snyder</ContactName>  
          <ContactTitle>Marketing Manager</ContactTitle>  
          <Phone>(503) 555-7555</Phone>  
          <FullAddress>  
            <Address>2732 Baker Blvd.</Address>  
            <City>Eugene</City>  
            <Region>OR</Region>  
            <PostalCode>97403</PostalCode>  
            <Country>USA</Country>  
          </FullAddress>  
        </Customer>  
        <Customer CustomerID="HUNGC">  
          <CompanyName>Hungry Coyote Import Store</CompanyName>  
          <ContactName>Yoshi Latimer</ContactName>  
          <ContactTitle>Sales Representative</ContactTitle>  
          <Phone>(503) 555-6874</Phone>  
          <Fax>(503) 555-2376</Fax>  
          <FullAddress>  
            <Address>City Center Plaza 516 Main St.</Address>  
            <City>Elgin</City>  
            <Region>OR</Region>  
            <PostalCode>97827</PostalCode>  
            <Country>USA</Country>  
          </FullAddress>  
        </Customer>  
        <Customer CustomerID="LAZYK">  
          <CompanyName>Lazy K Kountry Store</CompanyName>  
          <ContactName>John Steel</ContactName>  
          <ContactTitle>Marketing Manager</ContactTitle>  
          <Phone>(509) 555-7969</Phone>  
          <Fax>(509) 555-6221</Fax>  
          <FullAddress>  
            <Address>12 Orchestra Terrace</Address>  
            <City>Walla Walla</City>  
            <Region>WA</Region>  
            <PostalCode>99362</PostalCode>  
            <Country>USA</Country>  
          </FullAddress>  
        </Customer>  
        <Customer CustomerID="LETSS">  
          <CompanyName>Let's Stop N Shop</CompanyName>  
          <ContactName>Jaime Yorres</ContactName>  
          <ContactTitle>Owner</ContactTitle>  
          <Phone>(415) 555-5938</Phone>  
          <FullAddress>  
            <Address>87 Polk St. Suite 5</Address>  
            <City>San Francisco</City>  
            <Region>CA</Region>  
            <PostalCode>94117</PostalCode>  
            <Country>USA</Country>  
          </FullAddress>  
        </Customer>  
      </Customers>  
      <Orders>  
        <Order>  
          <CustomerID>GREAL</CustomerID>  
          <EmployeeID>6</EmployeeID>  
          <OrderDate>1997-05-06T00:00:00</OrderDate>  
          <RequiredDate>1997-05-20T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1997-05-09T00:00:00">  
            <ShipVia>2</ShipVia>  
            <Freight>3.35</Freight>  
            <ShipName>Great Lakes Food Market</ShipName>  
            <ShipAddress>2732 Baker Blvd.</ShipAddress>  
            <ShipCity>Eugene</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97403</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>GREAL</CustomerID>  
          <EmployeeID>8</EmployeeID>  
          <OrderDate>1997-07-04T00:00:00</OrderDate>  
          <RequiredDate>1997-08-01T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1997-07-14T00:00:00">  
            <ShipVia>2</ShipVia>  
            <Freight>4.42</Freight>  
            <ShipName>Great Lakes Food Market</ShipName>  
            <ShipAddress>2732 Baker Blvd.</ShipAddress>  
            <ShipCity>Eugene</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97403</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>GREAL</CustomerID>  
          <EmployeeID>1</EmployeeID>  
          <OrderDate>1997-07-31T00:00:00</OrderDate>  
          <RequiredDate>1997-08-28T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1997-08-05T00:00:00">  
            <ShipVia>2</ShipVia>  
            <Freight>116.53</Freight>  
            <ShipName>Great Lakes Food Market</ShipName>  
            <ShipAddress>2732 Baker Blvd.</ShipAddress>  
            <ShipCity>Eugene</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97403</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>GREAL</CustomerID>  
          <EmployeeID>4</EmployeeID>  
          <OrderDate>1997-07-31T00:00:00</OrderDate>  
          <RequiredDate>1997-08-28T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1997-08-04T00:00:00">  
            <ShipVia>2</ShipVia>  
            <Freight>18.53</Freight>  
            <ShipName>Great Lakes Food Market</ShipName>  
            <ShipAddress>2732 Baker Blvd.</ShipAddress>  
            <ShipCity>Eugene</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97403</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>GREAL</CustomerID>  
          <EmployeeID>6</EmployeeID>  
          <OrderDate>1997-09-04T00:00:00</OrderDate>  
          <RequiredDate>1997-10-02T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1997-09-10T00:00:00">  
            <ShipVia>1</ShipVia>  
            <Freight>57.15</Freight>  
            <ShipName>Great Lakes Food Market</ShipName>  
            <ShipAddress>2732 Baker Blvd.</ShipAddress>  
            <ShipCity>Eugene</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97403</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>GREAL</CustomerID>  
          <EmployeeID>3</EmployeeID>  
          <OrderDate>1997-09-25T00:00:00</OrderDate>  
          <RequiredDate>1997-10-23T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1997-09-30T00:00:00">  
            <ShipVia>3</ShipVia>  
            <Freight>76.13</Freight>  
            <ShipName>Great Lakes Food Market</ShipName>  
            <ShipAddress>2732 Baker Blvd.</ShipAddress>  
            <ShipCity>Eugene</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97403</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>GREAL</CustomerID>  
          <EmployeeID>4</EmployeeID>  
          <OrderDate>1998-01-06T00:00:00</OrderDate>  
          <RequiredDate>1998-02-03T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1998-02-04T00:00:00">  
            <ShipVia>2</ShipVia>  
            <Freight>719.78</Freight>  
            <ShipName>Great Lakes Food Market</ShipName>  
            <ShipAddress>2732 Baker Blvd.</ShipAddress>  
            <ShipCity>Eugene</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97403</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>GREAL</CustomerID>  
          <EmployeeID>3</EmployeeID>  
          <OrderDate>1998-03-09T00:00:00</OrderDate>  
          <RequiredDate>1998-04-06T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1998-03-18T00:00:00">  
            <ShipVia>2</ShipVia>  
            <Freight>33.68</Freight>  
            <ShipName>Great Lakes Food Market</ShipName>  
            <ShipAddress>2732 Baker Blvd.</ShipAddress>  
            <ShipCity>Eugene</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97403</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>GREAL</CustomerID>  
          <EmployeeID>3</EmployeeID>  
          <OrderDate>1998-04-07T00:00:00</OrderDate>  
          <RequiredDate>1998-05-05T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1998-04-15T00:00:00">  
            <ShipVia>2</ShipVia>  
            <Freight>25.19</Freight>  
            <ShipName>Great Lakes Food Market</ShipName>  
            <ShipAddress>2732 Baker Blvd.</ShipAddress>  
            <ShipCity>Eugene</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97403</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>GREAL</CustomerID>  
          <EmployeeID>4</EmployeeID>  
          <OrderDate>1998-04-22T00:00:00</OrderDate>  
          <RequiredDate>1998-05-20T00:00:00</RequiredDate>  
          <ShipInfo>  
            <ShipVia>3</ShipVia>  
            <Freight>18.84</Freight>  
            <ShipName>Great Lakes Food Market</ShipName>  
            <ShipAddress>2732 Baker Blvd.</ShipAddress>  
            <ShipCity>Eugene</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97403</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>GREAL</CustomerID>  
          <EmployeeID>4</EmployeeID>  
          <OrderDate>1998-04-30T00:00:00</OrderDate>  
          <RequiredDate>1998-06-11T00:00:00</RequiredDate>  
          <ShipInfo>  
            <ShipVia>3</ShipVia>  
            <Freight>14.01</Freight>  
            <ShipName>Great Lakes Food Market</ShipName>  
            <ShipAddress>2732 Baker Blvd.</ShipAddress>  
            <ShipCity>Eugene</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97403</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>HUNGC</CustomerID>  
          <EmployeeID>3</EmployeeID>  
          <OrderDate>1996-12-06T00:00:00</OrderDate>  
          <RequiredDate>1997-01-03T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1996-12-09T00:00:00">  
            <ShipVia>2</ShipVia>  
            <Freight>20.12</Freight>  
            <ShipName>Hungry Coyote Import Store</ShipName>  
            <ShipAddress>City Center Plaza 516 Main St.</ShipAddress>  
            <ShipCity>Elgin</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97827</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>HUNGC</CustomerID>  
          <EmployeeID>1</EmployeeID>  
          <OrderDate>1996-12-25T00:00:00</OrderDate>  
          <RequiredDate>1997-01-22T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1997-01-03T00:00:00">  
            <ShipVia>3</ShipVia>  
            <Freight>30.34</Freight>  
            <ShipName>Hungry Coyote Import Store</ShipName>  
            <ShipAddress>City Center Plaza 516 Main St.</ShipAddress>  
            <ShipCity>Elgin</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97827</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>HUNGC</CustomerID>  
          <EmployeeID>3</EmployeeID>  
          <OrderDate>1997-01-15T00:00:00</OrderDate>  
          <RequiredDate>1997-02-12T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1997-01-24T00:00:00">  
            <ShipVia>1</ShipVia>  
            <Freight>0.2</Freight>  
            <ShipName>Hungry Coyote Import Store</ShipName>  
            <ShipAddress>City Center Plaza 516 Main St.</ShipAddress>  
            <ShipCity>Elgin</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97827</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>HUNGC</CustomerID>  
          <EmployeeID>4</EmployeeID>  
          <OrderDate>1997-07-16T00:00:00</OrderDate>  
          <RequiredDate>1997-08-13T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1997-07-21T00:00:00">  
            <ShipVia>1</ShipVia>  
            <Freight>45.13</Freight>  
            <ShipName>Hungry Coyote Import Store</ShipName>  
            <ShipAddress>City Center Plaza 516 Main St.</ShipAddress>  
            <ShipCity>Elgin</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97827</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>HUNGC</CustomerID>  
          <EmployeeID>8</EmployeeID>  
          <OrderDate>1997-09-08T00:00:00</OrderDate>  
          <RequiredDate>1997-10-06T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1997-10-15T00:00:00">  
            <ShipVia>1</ShipVia>  
            <Freight>111.29</Freight>  
            <ShipName>Hungry Coyote Import Store</ShipName>  
            <ShipAddress>City Center Plaza 516 Main St.</ShipAddress>  
            <ShipCity>Elgin</ShipCity>  
            <ShipRegion>OR</ShipRegion>  
            <ShipPostalCode>97827</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>LAZYK</CustomerID>  
          <EmployeeID>1</EmployeeID>  
          <OrderDate>1997-03-21T00:00:00</OrderDate>  
          <RequiredDate>1997-04-18T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1997-04-10T00:00:00">  
            <ShipVia>3</ShipVia>  
            <Freight>7.48</Freight>  
            <ShipName>Lazy K Kountry Store</ShipName>  
            <ShipAddress>12 Orchestra Terrace</ShipAddress>  
            <ShipCity>Walla Walla</ShipCity>  
            <ShipRegion>WA</ShipRegion>  
            <ShipPostalCode>99362</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>LAZYK</CustomerID>  
          <EmployeeID>8</EmployeeID>  
          <OrderDate>1997-05-22T00:00:00</OrderDate>  
          <RequiredDate>1997-06-19T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1997-06-26T00:00:00">  
            <ShipVia>2</ShipVia>  
            <Freight>11.92</Freight>  
            <ShipName>Lazy K Kountry Store</ShipName>  
            <ShipAddress>12 Orchestra Terrace</ShipAddress>  
            <ShipCity>Walla Walla</ShipCity>  
            <ShipRegion>WA</ShipRegion>  
            <ShipPostalCode>99362</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>LETSS</CustomerID>  
          <EmployeeID>1</EmployeeID>  
          <OrderDate>1997-06-25T00:00:00</OrderDate>  
          <RequiredDate>1997-07-23T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1997-07-04T00:00:00">  
            <ShipVia>2</ShipVia>  
            <Freight>13.73</Freight>  
            <ShipName>Let's Stop N Shop</ShipName>  
            <ShipAddress>87 Polk St. Suite 5</ShipAddress>  
            <ShipCity>San Francisco</ShipCity>  
            <ShipRegion>CA</ShipRegion>  
            <ShipPostalCode>94117</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>LETSS</CustomerID>  
          <EmployeeID>8</EmployeeID>  
          <OrderDate>1997-10-27T00:00:00</OrderDate>  
          <RequiredDate>1997-11-24T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1997-11-05T00:00:00">  
            <ShipVia>2</ShipVia>  
            <Freight>51.44</Freight>  
            <ShipName>Let's Stop N Shop</ShipName>  
            <ShipAddress>87 Polk St. Suite 5</ShipAddress>  
            <ShipCity>San Francisco</ShipCity>  
            <ShipRegion>CA</ShipRegion>  
            <ShipPostalCode>94117</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>LETSS</CustomerID>  
          <EmployeeID>6</EmployeeID>  
          <OrderDate>1997-11-10T00:00:00</OrderDate>  
          <RequiredDate>1997-12-08T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1997-11-21T00:00:00">  
            <ShipVia>2</ShipVia>  
            <Freight>45.97</Freight>  
            <ShipName>Let's Stop N Shop</ShipName>  
            <ShipAddress>87 Polk St. Suite 5</ShipAddress>  
            <ShipCity>San Francisco</ShipCity>  
            <ShipRegion>CA</ShipRegion>  
            <ShipPostalCode>94117</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
        <Order>  
          <CustomerID>LETSS</CustomerID>  
          <EmployeeID>4</EmployeeID>  
          <OrderDate>1998-02-12T00:00:00</OrderDate>  
          <RequiredDate>1998-03-12T00:00:00</RequiredDate>  
          <ShipInfo ShippedDate="1998-02-13T00:00:00">  
            <ShipVia>2</ShipVia>  
            <Freight>90.97</Freight>  
            <ShipName>Let's Stop N Shop</ShipName>  
            <ShipAddress>87 Polk St. Suite 5</ShipAddress>  
            <ShipCity>San Francisco</ShipCity>  
            <ShipRegion>CA</ShipRegion>  
            <ShipPostalCode>94117</ShipPostalCode>  
            <ShipCountry>USA</ShipCountry>  
          </ShipInfo>  
        </Order>  
      </Orders>  
    </Root>



    • Edited by Sudip_inn Saturday, November 17, 2018 7:07 PM
    Saturday, November 17, 2018 7:01 PM

Answers

  • Hi Sudip_inn,

    >>what CompareTo("K") will do ? please help me to understand this

    CompareTo is the method of string, which compares this instance with a specified object or String and returns an integer that indicates whether this instance precedes, follows, or appears in the same position in the sort order as the specified object or String.

    >>if i comment this line where ((string)c.Attribute("CustomerID")).CompareTo("K") > 0  then what will happen ?

    If you comment the line, it will retrieve all the records in  the following code.

    custOrd.Element("Customers").Elements("Customer")

    If not comment the line, you could only retrieve the record that contains 'K'

    <Customer CustomerID="LAZYK">  

    Best regards,

    Zhanglong


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • Marked as answer by Sudip_inn Monday, November 19, 2018 7:31 PM
    Monday, November 19, 2018 2:26 AM
    Moderator