LINQ2SQL获取随机记录
本文关键字:记录 随机 获取 LINQ2SQL | 更新日期: 2023-09-27 18:15:26
我发现了这个方便的查询;
SELECT TOP 1 * FROM Advertising ORDER BY NEWID()
,但需要将其转换为LINQ
查询。
我试着这样做;
var a = (from record in Advertising
select record)
但是不知道如何排序以便返回一个随机记录
直接执行命令可能是最简单的。
var a = ctx.ExecuteQuery<Advertising>("select top 1 * from Advertising order by NEWID()").First();
你也可以用一个进程来完成它,或者如果你想用一种完全通用的方式来完成它,你可以查询计数,然后在该范围内生成一个随机数并跳过。(正如其他人在我打字时注意到的)
这不会生成您正在查看的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记录长的
这是我的get随机方法
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