我正在尝试实现一个 LINQ-to-SQL 扩展方法,它只会获取一个随机行。这是我的代码:
public static T RandomRow(this IQueryable<T> query)
{
Random rand = new Random();
int row = rand.Next(0, query.Count());
return query.Skip(row).First();
}
问题是,query.Count() 和 query.Skip() 有一个错误“The type arguments for method '...' cannot be inferred from usage”。尝试明确指定类型参数'。如果我将 T 修改为特定对象,它工作正常,但将此方法用于任何数据库对象会很棒。
有什么想法吗?
最佳答案
您的方法看起来应该是通用的:
// Note the <T> after the method name
public static T RandomRow<T>(this IQueryable<T> query)
要么那样,要么将其放在泛型类中。
您可能还想使用 ElementAt
方法而不是 Skip
/First
。
编辑:正如 CodeInChaos 指出的那样,您对 Random
的使用也存在问题。参见 my article on random numbers获取更多信息。
关于c# - 通用方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7469138/