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

Edw*_*uay 4 c# linq linq-to-xml

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

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

哪个工作正常,但现在我想添加一个OrderBy子句,但无法获得正确的语法,这里它不识别 OrderBy子句中的"pageItem"等.

如何让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;
}
Run Code Online (Sandbox Code Playgroud)

Sco*_*vey 7

您是否尝试将OrderBy移动到选择后并使用PageItem对象的属性来命令而不是XML元素?

// Move this to after the select...
.OrderBy(pi => pi.DisplayOrder);
Run Code Online (Sandbox Code Playgroud)