代码之家  ›  专栏  ›  技术社区  ›  Edward Tanguay

如何将orderby添加到此LINQ语句中?

  •  4
  • Edward Tanguay  · 技术社区  · 16 年前

    我通过将WHERE子句作为委托发送到自定义方法来从XML文件中获取数据:

    foreach (PageItem pageItem in GetPageItems(xmlDoc, sf => (int)sf.Element("id") == id))
    {
        _collection.Add(pageItem);
    }
    

    很好,但现在我想增加一个 排序 子句也是,但不能得到正确的语法,这里是 无法识别“pageitem” 在orderby子句等中。

    如何让orderby在下面的代码中工作?

    public IEnumerable<PageItem> GetPageItems(XDocument xmlDoc, Func<XElement, bool> whereClause)
    {
        var pageItems = xmlDoc.Descendants("pageItem")
            .Where(whereClause)
            .OrderBy((int)pageItem.Element("displayOrder").Value)
            .Select(pageItem => new PageItem
            {
                Id = (int)pageItem.Element("id"),
                WhenCreated = (DateTime)pageItem.Element("whenCreated"),
                ItemOwner = pageItem.Element("itemOwner").Value,
                PublishStatus = pageItem.Element("publishStatus").Value,
                CorrectionOfId = (int)pageItem.Element("correctionOfId"),
    
                IdCode = pageItem.Element("idCode").Value,
                Menu = pageItem.Element("menu").Value,
                Title = pageItem.Element("title").Value,
                Description = pageItem.Element("description").Value,
                AccessGroups = pageItem.Element("accessGroups").Value,
                DisplayOrder = (int)pageItem.Element("displayOrder")
    
    
            });
        return pageItems;
    }
    
    2 回复  |  直到 14 年前
        1
  •  7
  •   Scott Ivey    16 年前

    是否尝试将orderby移到select之后,并使用pageitem对象的属性来排序,而不是使用xml元素?

    // Move this to after the select...
    .OrderBy(pi => pi.DisplayOrder);
    
        2
  •  3
  •   LBushkin    16 年前

    我怀疑您可能想将行改为:

    .OrderBy( p => (int)p.Element("displayOrder").Value )
    

    orderby()扩展需要一个“键选择器”委托(func),该委托可用于从要订购的项目中提取键。