LINQ2SQL获取随机记录

时间:2011-11-22 04:06:31

标签: c# linq-to-sql

我找到了这个方便的查询;

SELECT TOP 1 * FROM Advertising ORDER BY NEWID()

但需要将其转换为LINQ查询。

我尝试过做类似的事情;

var a = (from record in Advertising
        select record)

但无法弄清楚如何进行排序以便返回随机记录。

3 个答案:

答案 0 :(得分:4)

直接执行命令可能最简单。

var a = ctx.ExecuteQuery<Advertising>("select top 1 * from Advertising order by NEWID()").First();

您也可以使用sproc执行此操作,或者如果您想要完全通用的方法,可以查询计数,然后在该范围内生成随机数并跳过。 (正如其他人在我输入时所说的那样)

答案 1 :(得分:3)

这不会生成您正在查看的SQL,但应该返回随机结果,而不必检索所有记录:

Random r = new Random();
var record = r.Next(Advertising.Count());

var randomRecord = Advertising.Skip(record).FirstOrDefault(1);

编辑:它应该比随机排序更有效(除非SQL Server优化排序)

编辑2:Take(1)应该是FirstOrDefault()返回记录,而不是列表1记录长。

答案 2 :(得分:0)

这是我的随机方法

Public Shared Function GetSingleRandom(Of T)(ByVal target As IEnumerable(Of T)) As T
        Dim r As New Random(DateTime.Now.Millisecond)
        Dim position As Integer = r.Next(target.Count)
        Return target.ElementAt(position)
    End Function