随机LINQ to SQL记录带有“int”主键

时间:2009-08-18 18:45:05

标签: .net linq-to-sql

如何从LINQ to SQL表[T]中获取5个随机记录?

我通过谷歌发现的所有示例都使用uniqueidentifier作为主键

http://www.davidmuto.com/Blog.muto/View/random-records-with-linq-to-sql

当主键是自动递增的整数时,有没有办法做到这一点?

某些记录也可以删除,因此最小到最大ID设置将有漏洞。

非常感谢任何帮助。

-CV

1 个答案:

答案 0 :(得分:1)

首先,你可以看一下这篇文章,看似有办法去做你想要的:http://weblogs.asp.net/fmarguerie/archive/2008/01/10/randomizing-linq-to-sql-queries.aspx

  

让我们详细介绍使用a的解决方案   SQL用户定义的函数。最多   随机排序记录的常用方法是   使用NEWID SQL Server功能。   这就是该解决方案的用途。

     

首先,创建以下视图:

     

创建视图RandomView AS SELECT   NEWID()作为ID然后创建   以下使用视图的函数:

     

创建功能GetNewId()返回   uniqueidentifier AS BEGIN RETURN   (从RandomView中选择ID)END

     

视图是必需的,因为它不是   可以在a中直接使用NEWID   标量函数。

     

然后您可以映射GetNewId   使用LINQ的用户定义函数   SQL的Function属性。再看一遍   第8章了解详情。

     

就是这样!你现在可以写LINQ了   像往常一样查询。这是一个例子   选择一个随机对象:

     

var tool = db.Tools.OrderBy(t =>   db.GetNewId())。首先()

     

这是另一个使用的例子   GetNewId随机排序结果:

     

var tools =来自db.Tools中的工具
  orderby db.GetNewId()选择   tool.Name;

SO上还有这篇文章:Random row from Linq to Sql