我知道使用
ORDER BY NEWID()
运行常规sql命令时的功能。我想做同样的事情,但是要通过linq2sql。
我宁愿而不是选择整个范围,通过rnd.Next()添加一个随机数,然后按此排序...
最佳答案
Marc Gravell发布了solution here,它允许您定义一个函数,该函数在DataContext的部分类中使用NEWID。不要将其放在生成的DataContext类中,否则将来的更新将清除您添加的内容。
Marc展示了如何将其与查询表达式语法一起使用。或者,使用点符号,您可以编写:
var results = dc.Table.OrderBy(r => dc.Random()).Take(n);
如果您不熟悉创建部分类,只需将新类添加到您的解决方案中。只要类定义将DataContext类名与
partial
关键字一起使用,它的名称就无关紧要。例如,如果您的DataContext名为XYZDataContext
,则可以添加一个名为XYZDataContextPartial.cs
的新类,并将其定义为:namespace YourNamespace
{
public partial class XYZDataContext
{
}
}