如何从LINQ to SQL表[T]中获取5个随机记录?
我通过谷歌发现的所有示例都使用uniqueidentifier作为主键
http://www.davidmuto.com/Blog.muto/View/random-records-with-linq-to-sql
当主键是自动递增的整数时,有没有办法做到这一点?
某些记录也可以删除,因此最小到最大ID设置将有漏洞。
非常感谢任何帮助。
-CV
答案 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