我编写了一个从列表中获取给定数量的随机记录的函数。目前我可以做类似的事情:
IEnumerable<City> cities = db.Cites.GetRandom(5);
(其中 db 是我的 DataContext 连接到 SQL Server DB)
目前,我在每个需要随机记录的实体中都有这样的功能:
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;
}
但我得到:
错误 1 类型“T”必须是引用类型才能在泛型类型或方法“System.Data.Linq.Table”中用作参数“TEntity”
其中突出显示GetRandom<T>
。
我不明白这里有什么问题。有人可以清除正确的语法吗?