2011-10-07 69 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();