我写了一个函数,它可以从列表中获取给定数量的随机记录。目前,我可以这样做:自定义Linq扩展语法
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;
}
,但我得到:
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>
。
我不明白这里的问题是什么。有人可以清理正确的语法吗?
要修复您的GetRandom方法,请在该方法的参数后面添加'where T:class'。 – 2009-04-10 16:34:12