C# LINQ2SQL获取随机记录
我找到了这个方便的查询C# LINQ2SQL获取随机记录,c#,linq-to-sql,C#,Linq To Sql,我找到了这个方便的查询 SELECT TOP 1 * FROM Advertising ORDER BY NEWID() 但需要将其转换为LINQ查询 我试着做一些类似的事情 var a = (from record in Advertising select record) 但无法确定如何进行排序以返回随机记录。这不会生成您正在查看的SQL,但应该返回随机结果,而不必检索所有记录: Random r = new Random(); var record = r.Next(A
SELECT TOP 1 * FROM Advertising ORDER BY NEWID()
但需要将其转换为LINQ查询
我试着做一些类似的事情
var a = (from record in Advertising
select record)
但无法确定如何进行排序以返回随机记录。这不会生成您正在查看的SQL,但应该返回随机结果,而不必检索所有记录:
Random r = new Random();
var record = r.Next(Advertising.Count());
var randomRecord = Advertising.Skip(record).FirstOrDefault(1);
编辑:它也应该比随机排序更有效,除非SQL Server优化排序
编辑2:Take1应该是第一个或默认返回记录,而不是列表1记录的长度。下面是我的get random方法
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
直接执行命令可能是最简单的方法
var a = ctx.ExecuteQuery<Advertising>("select top 1 * from Advertising order by NEWID()").First();
您也可以使用存储过程来执行此操作,或者如果您想要一种完全通用的方式来执行此操作,您可以查询计数,然后在该范围内生成一个随机数并跳过。正如其他人在我键入此可能的副本时所指出的那样:另请参见:关于可能的副本,我无法获取.Random towork@MichaelStum如果是两个查询,这真的很重要吗?这可能不理想,但它会得到所需的结果,我不知道如何在单个查询中实现。只有某些C方法具有到SQL的映射,这一事实使问题变得复杂。如果需要的话,希望其他人会提供更好的解决方案。这是一个很小的表,所以不,两个查询都不需要matter@AndrewBarber也许是的,也许不是。我不知道用户所处的情况,也不知道使用DataContext.ExecuteQuery的原始sql查询是否是更好的选择。这是一个重要的考虑因素,但如果性能不是一个问题,我会选择程序员最了解的。如果性能被证明是一个问题,那么可以进行适当记录的优化。我认为可能有一种纯粹的LINQ方法来做到这一点,但似乎我可能错了,所以我选择了this@griegs-看看前面给出的链接,它绝对可以使用LINQ@Polity,是的,我看到了,但看着它,它看起来有点困惑,因为我想另一个人会看着它说WTF?因此,我不认为这是因为它