Susan
Susan

Reputation: 1832

Linq to XML: .Net Windows Forms, XML query

I am trying to create a customer record which would include First Name, Last Name, SSN and Date of Birth. When a user selects a customer from the combobox (cboCustomer), it calls the SelectedIndexChanged event. I want to use the selected index to get the correct customer record from my XML.

Here is the query I've created, but it is empty. Below the query is my XML data source.

    private void cboCustomer_SelectedIndexChanged(object sender, EventArgs e)
    {
        var doc = XElement.Load("Portfolio.xml");
        customerId = cboCustomer.SelectedIndex.ToString();
        if (cboCustomer.SelectedIndex != 0)
        {
            var custRecord =
                from account in doc.Descendants("account")
                let acct = account.Element("acct")
                where (string)account.Element("custid") == customerId
                select new
                {Fname=(string)account.Element("fname"),
                    Lname = (string)account.Element("lname"),
                    Ssn = (string)account.Element("ssn"),
                    Dob = (string)account.Element("dob")
                };
        }
    }
<?xml version="1.0" encoding="utf-8" ?>
<portfolio>
  <account>
    <acct custid="1" fname="Tommy" lname="Hawk" ssn="928-329-1929" dob="4/6/1988"></acct>
    <deposits depid="1000" depdate="1/2/2011" depamount="1350.53"></deposits>
    <deposits depid="1003" depdate="2/3/2011" depamount="1377.81"></deposits>
    <deposits depid="1008" depdate="3/14/2011" depamount="84.00"></deposits>
    <withdrawals wdid="2001" wddate="1/31/2011" wdamount="80.00"></withdrawals>
    <withdrawals wdid="2005" wddate="4/8/2011" wdamount="80.00"></withdrawals>
    <withdrawals wdid="2007" wddate="6/1/2011" wdamount="2600.00"></withdrawals>
  </account>
  <account>
    <acct custid="2" fname="I. P." lname="Nightly" ssn="457-23-4871" dob="6/1/1945"></acct>
    <deposits depid="1004" depdate="2/8/2011" depamount="741.22"></deposits>
    <deposits depid="1005" depdate="2/9/2011" depamount="47.00"></deposits>
    <deposits depid="1009" depdate="3/14/2011" depamount="89.99"></deposits>
    <withdrawals wdid="2003" wddate="3/1/2011" wdamount="55.00"></withdrawals>
    <withdrawals wdid="2004" wddate="3/3/2011" wdamount="28.00"></withdrawals>
    <withdrawals wdid="2006" wddate="4/8/2011" wdamount="450.00"></withdrawals>
  </account>
  <account>
    <acct custid="3" fname="Mary" lname="Echmass" ssn="192-01-2933" dob="8/10/1973"></acct>
    <deposits depid="1002" depdate="1/15/2011" depamount="841.77"></deposits>
    <deposits depid="1006" depdate="2/14/2011" depamount="2170.00"></deposits>
    <deposits depid="1007" depdate="3/10/2011" depamount="21.01"></deposits>
    <withdrawals wdid="2002" wddate="1/16/2011" wdamount="700.00"></withdrawals>
    <withdrawals wdid="2008" wddate="6/3/2011" wdamount="24.00"></withdrawals>
    <withdrawals wdid="2009" wddate="6/30/2100" wdamount="38.46"></withdrawals>
  </account>  
</portfolio>

Upvotes: 0

Views: 133

Answers (1)

svick
svick

Reputation: 244918

There is no element custid in your XML, but you're looking for it in your code.

You probably want

where acct.Attribute("custid").Value == customerId

And you need to modify your select in a similar way.

Upvotes: 2

Related Questions