我通过将where子句作为委托发送到自定义方法来从XML文件中获取数据:
foreach (PageItem pageItem in GetPageItems(xmlDoc, sf => (int)sf.Element("id") == id))
{
_collection.Add(pageItem);
}
工作正常,但现在我想添加 OrderBy 子句,但无法获得正确的语法,此处无法识别“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;
}
答案 0 :(得分:7)
您是否尝试将OrderBy移动到Select之后并使用PageItem对象的属性来命令而不是XML元素?
// Move this to after the select...
.OrderBy(pi => pi.DisplayOrder);
答案 1 :(得分:3)
我怀疑您可能希望将该行更改为:
.OrderBy( p => (int)p.Element("displayOrder").Value )
OrderBy()扩展需要一个“键选择器”委托(Func),它可用于从您想要订购的项目中提取密钥。