我花了不少时间阅读和了解LINQ to XML,但我在这里遇到了障碍。这里是我的XML文件的示例:LINQ to XML查询 - 代码只返回第一项
<project>
<project_number>20071234</project_number>
<project_name>ProjectA</project_name>
<project_unc>\\fileserver1\projects\</project_unc>
<contract>
<full_name>Contract 00 Project1</full_name>
<directory_name>00_Project1</directory_name>
</contract>
<contract>
<full_name>Contract 01 Project2</full_name>
<directory_name>01_Project2</directory_name>
</contract>
</project>
<project>
<project_number>20081234</project_number>
<project_name>ProjectB</project_name>
<project_unc>\\fileserver2\projects\</project_unc>
<contract>
<full_name>Contract 00 Project3</full_name>
<directory_name>00_project3</directory_name>
</contract>
<contract>
<full_name>Contract 01 Project4</full_name>
<directory_name>01_project4</directory_name>
</contract>
</project>
在我的程序中,有人会从下拉列表中选择一个project_number。当他们这样做时,它将触发对将捕获该project_number的XML文件的查询,并查找所有合同。
XDocument XDoc = null;
XDoc = XDocument.Load("projects.xml");
List<ProjectContract> pc = new List<ProjectContract>(); //Created in class
var query = from xml in XDoc.Descendants("project") where (string)xml.Element("project_number") == dropDown1.SelectedItem
select new ProjectContract
{
fullname = (string)xml.Element("contract").Element("full_name"),
dirname = (string)xml.Element("contract").Element("directory_name")
};
pc = query.ToList();
我明显在这里做错了事;我什么都看不到。此代码只返回来自任一项目的第一个合同项目,但不是两者。
这在这里就是答案!这是我所有搜索中第一次从连续发表的文章中看到两篇。非常感谢!! – Greg 2010-09-26 06:39:00
很高兴为您提供帮助 - 您可能会发现[MSDN 101 LINQ示例](http://msdn.microsoft.com/zh-cn/vcsharp/aa336746.aspx)是一个有用的资源。有关复合'from'的更多信息,请参见[SelectMany示例](http://msdn.microsoft.com/zh-cn/vcsharp/aa336758.aspx#SelectManyMultiplefrom)。 – jball 2010-09-26 17:56:01