Linqtoxml过滤无法正常工作

时间:2013-12-24 10:46:26

标签: asp.net linq gridview filtering

我正在使用互联网上的教程我使用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();
}

1 个答案:

答案 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重载......)