如何在CurrentPage.Children循环中排除ID为1234的单个节点
解决方法:调整过滤与截取的顺序
嘿,这个需求很好实现,不过要注意过滤和截取的顺序,不然可能达不到你想要的效果哦~
推荐的正确写法
你应该先排除ID为1234的节点,再从中取前6个,这样能保证最多显示6个符合要求的子节点(不会因为先取6个再过滤导致数量不足)。修改后的代码如下:
@{ foreach( var child in CurrentPage.Children.Where(x => x.Id != 1234).Take(6) ){ Html.Partial("Archive/Post", new ViewDataDictionary {{ "item", (object)child }} ) } }
为什么要调整顺序?
如果像你最初想的那样先Take(6)再Where,会出现这种情况:假设前6个子节点里刚好包含ID为1234的节点,过滤后你只能显示5个内容,这大概率不是你想要的结果。
如果你确实需要先取前6个再过滤(场景较少)
要是你的业务逻辑就是要先取前6个,再排除其中ID为1234的节点,那代码可以这么写,但要接受最终显示数量可能少于6个:
@{ foreach( var child in CurrentPage.Children.Take(6).Where(x => x.Id != 1234) ){ Html.Partial("Archive/Post", new ViewDataDictionary {{ "item", (object)child }} ) } }
内容的提问来源于stack exchange,提问作者sjodough
相关产品推荐
相关产品推荐

