Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ2SQL获取随机记录_C#_Linq To Sql - Fatal编程技术网

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?因此,我不认为这是因为它