我正在尝试用他们的第一个字母对一些节点进行排序,然后用剃刀将它们分页。(Umbraco)。但是当它遇到foreach时,得到一个“对象不包含'Skip'的定义”错误。
pagesToList = homeNode.Children.OrderBy("Name");
IEnumerable<DynamicNode> nl = @homeNode.Children.Items;
pagesToList = nl.Where(x => x.Name.StartsWith(currentLetter));
这是@pagesToList输出的内容:
System.Linq.Enumerable+WhereListIterator`1[umbraco.MacroEngines.DynamicNode]
foreach(dynamic item in pagesToList.Skip(1){
}
答案 0 :(得分:0)
您可能使用了错误的属性。如果您只是在 homeNode 下方的节点之后,请不要使用Items属性。另外,尽量不要施放你的物体。 C#有一个有效的var对象。假设homeNode是DynamicNode,那么可能值得尝试以下方法:
pagesToList = homeNode.Children.OrderBy("Name").Where(x => x.Name.StartsWith(currentLetter));
那么你的代码应该可行。请注意,我们再次使用var因为我们希望在编译时声明对象,而不是使用动态,我们应该只在访问一些未知或动态属性时才真正做到pagesToList对象):
foreach(var item in pagesToList.Skip(1)){ }
总而言之,看起来您的代码使用了属性“Items”,它为我们提供了一个DynamicNode []数组,而不是IEnumerable对象。
我希望这会帮助你。祝你好运!