使用LINQ 2 SQL选择随机行

时间:2012-05-22 18:30:01

标签: c# entity-framework linq-to-sql .net-4.0

我想知道使用LINQ 2 SQL从表中选择随机行的最佳方法,而我在搜索时发现了这两个问题:

Random row from Linq to Sql

Get a random row with LINQtoSQL

但我不认为这是最好的&最快的方法,根据msdn使用NewID()是一种随机选择行的坏方法:

http://msdn.microsoft.com/en-us/library/cc441928.aspx

他们提出了另一个比NewID方法更快的Query:

  SELECT * FROM Table1
  WHERE (ABS(CAST(
  (BINARY_CHECKSUM(*) *
  RAND()) as int)) % 100) < 10

此查询背后的基本思想是,他们希望为表中的每一行生成0到99之间的随机数,然后选择随机数小于指定百分比值的所有行

但是当我尝试使用LINQ执行此操作时,我找不到与BINARY_CHECKSUM相当的

它们是LINQ中BINARY_CHECKSUM的等价物吗?

是否真的是随机选择行的最快方式? (如果你能帮助我将它转换成LINQ代码,对我来说会更容易)

感谢您的帮助

1 个答案:

答案 0 :(得分:-1)

这样的东西会起作用吗?

private static readonly Random _randomInstance = new Random();
private readonly Func<int, bool> ChanceSuccess = new Func<float, bool>(f =>
    _randomInstance.Next(0, 101) <= f);

var result = from row in Table1
             where ChanceSuccess(10)
             select row;