I have been using this ExtensionMethod for a while:
public static IEnumerable GetRandom(this IEnumerable list, int count)
{
if (count <= 0)
yield break;
var r = new Random();
int limit = (count * 10);
foreach (var item in list.OrderBy(x => r.Next(0, limit)).Take(count))
yield return item;
}