【问题标题】:Linqtoxml filtering not workingLinqtoxml 过滤不起作用
【发布时间】:2013-12-24 10:46:26
【问题描述】:

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

【问题讨论】:

    标签: asp.net linq gridview filtering


    【解决方案1】:

    您当前正在未命名的命名空间中查找元素 - 而您链接到的文件的命名空间 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 重载,它需要一个谓词......)

    【讨论】:

      猜你喜欢
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 2014-08-24
      • 2018-01-04
      • 2020-12-23
      相关资源
      最近更新 更多