Я написал функцию, которая получает определенное количество случайных записей из списка. В настоящее время я могу сделать что-то вроде:
IEnumerable<City> cities = db.Cites.GetRandom(5);
(где db - мой DataContext, соединяющийся с БД SQL Server)
В настоящее время у меня есть такая функция в каждой сущности, из которой мне нужны случайные записи:
public partial class City
{
public static IEnumerable<City> GetRandom(int count)
{
Random random = new Random();
IEnumerable<City> cities = DB.Context.Cities.OrderBy( c => random.Next() ).Take(count);
return cities;
}
}
Он отлично работает, но я бы хотел, чтобы он был универсальным, чтобы он мог работать для любой таблицы или даже для любого списка элементов. Я пробовал метод расширения, как:
public static IEnumerable<T> GetRandom<T>( this Table<T> table, int count)
{
Random random = new Random();
IEnumerable<T> records = table.OrderBy(r => random.Next()).Take(count);
return records;
}
но я получаю:
Error 1 The type 'T' must be a reference type in order to use it as parameter 'TEntity' in the generic type or method 'System.Data.Linq.Table'
, который выделяет GetRandom<T>
.
Я не понимаю, в чем здесь проблема. Может кто-нибудь прояснить правильный синтаксис?