我正在使用互联网上的教程我使用xml文件this 。我想错过了一些东西。因为什么都没发生只是出现一个空白页面。我又做错了。我怎样才能将过滤后的数据绑定到gridview的
protected void Page_Load(object sender, EventArgs e)
{
XElement root = XElement.Load(Server.MapPath("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)
{
GridView1.DataSource = el;
}
GridView1.DataBind();
}
答案 0 :(得分:0)
您目前正在寻找未命名的命名空间中的元素 - 而您链接到的文件的名称空间URI为"http://www.adventure-works.com"
,用于您正在寻找的元素。
只需使用:
XNamespace aw = "http://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("Type") == "Shipping" &&
(string)add.Element(aw + "State") == "NY"
select add)
.Any()
select el;
或者稍微简单一点,IMO:
XNamespace aw = "http://www.adventure-works.com";
IEnumerable<XElement> purchaseOrders =
root.Elements(aw + "PurchaseOrder")
.Where(order => order.Elements(aw + "Address")
.Any(add => (string) add.Attribute(aw + "Type") == "Shipping"
&& (string) add.Element(aw + "State") == "NY"));
(基本上这不会使用查询表达式,因为它们实际上并没有在这里帮助你,而且我使用带有谓词的Any
重载......)