我知道使用

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
    {
    }
}

10-02 15:02