我找到了这个方便的查询;
SELECT TOP 1 * FROM Advertising ORDER BY NEWID()
但需要将其转换为LINQ
查询。
我尝试过做类似的事情;
var a = (from record in Advertising
select record)
但无法弄清楚如何进行排序以便返回随机记录。
答案 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