300 не очень много, поэтому да, сделайте это List:
IQueryable details = ...
IList detailList = details.ToList();
И теперь вы можете выбрать случайный элемент:
var randomItem = detailList[rand.Next(detailList.Count)];
, и вы могли бы повторить это 50 раз. Это, однако, приведет к дублированию, и процесс их устранения станет беспорядочным.
Итак, используйте стандартный алгоритм shuffle , а затем выберите первые 50:
Shuffle(detailList);
var selection = detailList.Take(50);