在C#中使用LINQ查询数据

时间:2013-10-31 12:06:51

标签: c# linq linq-to-xml

我一直在玩XDocument和LINQ。我设法写了一个文件:

<SchoolData storeName="mikveIsrael" location="mikve">
    <employee>
        <personalInfo>
            <name>Ilan Berlinbluv</name>
            <zip>58505</zip>
        </personalInfo>
        <employeeInfo>
            <salary>5000</salary>
            <id>1</id>
        </employeeInfo>
    </employee>
    <employee>
        <personalInfo>
            <name>Noam Inbar</name>
            <zip>58504</zip>
        </personalInfo>
        <employeeInfo>
            <salary>4500</salary>
            <id>2</id>
        </employeeInfo>
    </employee>
</SchoolData>  

我一直在尝试使用此代码读取值:

public void QueryDoc(XDocument doc)
{
    var data = (from item in doc.Descendants("employee")
               select new {
                   name = item.Element("personalInfo").Element("name").Value,
                   salary = item.Element("employeeInfo").Element("salary").Value,
                   ID = item.Element("employeeInfo").Element("ID").Value,
                   zip = item.Element("personalInfo").Element("zip").Value
                   });
        foreach (var p in data)
        {
            Console.WriteLine(p.ToString());
        }
    }

然而,当我尝试运行代码时,它给了我一个例外:Object reference not set to an instance of an object.
我一直在关注this tutorial,并且在他们的屏幕上它可以工作,但是在我的屏幕上却没有。

2 个答案:

答案 0 :(得分:2)

ID = item.Element("personalInfo").Element("ID").Value,

应该是

ID = item.Element("employeeInfo").Element("id").Value,

您正在查询错误的元素,该元素将返回null值,并在您使用NullPointerException时抛出.Value

答案 1 :(得分:1)

该行

ID = item.Element("personalInfo").Element("ID").Value,

将失败,因为ID

中没有元素personalInfo