cómo obtener filas aleatorias en linq con la última fila insertada en la parte superior

Estoy tratando de mostrar productos aleatorios a la vista para cada solicitud,esta OrderBy(r => Guid.NewGuid()) funciona bien, pero estoy tratando de aumentar el rendimiento cuando los registros de la tabla son enormes, así que utilicé la segunda opción deaquí

mi accion:

public ActionResult ProductType(string id)
{
List<ProductsView> productlist = (from a in this.dbo.ProductTable
                                 join ca in dbo.Category on a.CategoryID equals ca.CategoryID
                                 where ca.Category == id 
                                 select new ProductsView()
                                 {
                                 CategoryID = c.CategoryID,
                                 Categorycount = c.Categorycount
                                 }).ToList<ProductsView>();

// here shuffle or mix products

int count = productlist.Count();
int index = new Random().Next(count);
ViewBag.Products = productlist.Skip(index).ToList();

 return View();

}

pero cuando la vista devuelve faltan algunos registros, por ejemplo:

primera solicitud cuenta 4 índice 1

muestra 3 productos a la vista

segundo requisito cuenta 4 índice 2

muestra 2 productos a la vista

tercera solicitud cuenta 4 índice 3

muestra 1 producto a la vista

Finalmente tengo un requisito más. ¿Puedo mostrar la última fila insertada en la parte superior y dejar que otros productos sean aleatorios?

¿Puedo saber lo que me estoy perdiendo?

Cualquier ayuda sería genial.

Respuestas a la pregunta(1)

Su respuesta a la pregunta