我知道使用
ORDER BY NEWID()
运行常规sql命令时的功能。我想做同样的事情,但是通过linq2sql。
我更喜欢不来选择整个范围,通过rnd.Next()添加一个随机数,然后排序......
答案 0 :(得分:3)
Marc Gravell发布了一个solution here,它允许您定义一个在DataContext的分部类中使用NEWID的函数。不要将它放在生成的DataContext类中,否则将来的更新会消除你添加的内容。
Marc展示了如何将它与查询表达式语法一起使用。或者,使用点表示法,您可以写:
var results = dc.Table.OrderBy(r => dc.Random()).Take(n);
如果您不熟悉创建分部类,只需在解决方案中添加新类。只要类定义使用带有partial
关键字的DataContext类名,它的名称就无关紧要了。例如,如果您的DataContext名为XYZDataContext
,则可以添加名为XYZDataContextPartial.cs
的新类,并将其定义为:
namespace YourNamespace
{
public partial class XYZDataContext
{
}
}
答案 1 :(得分:2)
尝试Take
扩展方法:
.OrderBy(x=>x.NewId)
.Take(randomNumber);
我们在这里做的是:
如果您希望订单是随机的,请尝试以下操作:
.OrderBy(x => Guid.NewGuid())
.Take(20);
我们在这里做的是: