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)
您是否尝试将OrderBy移动到选择后并使用PageItem对象的属性来命令而不是XML元素?
// Move this to after the select...
.OrderBy(pi => pi.DisplayOrder);
Run Code Online (Sandbox Code Playgroud)