Randomize a page data collection in EPiServer
    
    
    Here's a neat little function that will randomize the order of a PageDataCollection. The random order will be changed on each and every call (using a different random seed based on current date and time in ticks). If you're using the result in a paged list you might want to consider tweaking the code somewhat, either caching the list or by caching the seed and send it into the function instead of using the DateTime.Now.Ticks on every call. 
public static PageDataCollection Shuffle(PageDataCollection originalCollection) {
      
    // Create randomizer
      
    Random rnd = new Random((int)DateTime.Now.Ticks);
      
      
    // Create an array of PageData from the PageDataCollection sent to this function
      
    PageData[] pages = new PageData[originalCollection.Count];
      
    originalCollection.CopyTo(pages, 0);
      
      
    // Create a byte array of the same length and fill with random values
      
    byte[] randomBytes = new byte[pages.Length];
      
    rnd.NextBytes(randomBytes);
      
      
    // Sort array of PageData based on random values in the byte array
      
    Array.Sort(randomBytes, pages);
      
      
    // Return the randomly sorted PageDataCollection 
      
    return new PageDataCollection(pages);
      
}
    
   
    Related posts: