2011-10-07 33 views

回答

4

尝试

var r = new Random(); 
var numberOfItems = 1; 
List<DynamicNode> pages = new DynamicNode(Model.Id).Descendants().Items.Where(x => x.Visible).OrderBy(x => r.Next()).Take(numberOfItems).ToList();  
+0

感谢,虽然不能完全肯定它的工作原理,但。这可能是因为目前只有两个项目是随机的,随着我们增加更多,它可能会更好? –

0

尝试的ElementAt()LINQ的方法:

Random r = new Random(); 
int max = 10; // set your own max 

var items = @Model.Content.AncestorOrSelf(1).Descendants("SomeNode").First().Descendants("SomeChildNode").First().Children; 
var item = items.ElementAt(r.Next(0, max)); // use linq ElementAt to retrieve your random node 
1

我更喜欢使用LINQ生成随机元数据,然后将其排序的方法。

IPublishedContent containerNode = Umbraco.TypedContent(1144); 
IPublishedContent randomlySelectedChildNode = containerNode.Children.OrderBy(n => Guid.NewGuid()).FirstOrDefault(); 

还有一个内置的一把umbraco扩展,你可以使用:

var randomNode = containerNode.Children.RandomOrder().FirstOrDefault();