gpt4 book ai didi

sql - 按新指南排序以获得随机顺序

转载 作者:行者123 更新时间:2023-12-04 13:42:24 27 4
gpt4 key购买 nike

为了从 Sql 查询中以随机顺序获得结果,我通常按新的 Guid 排序。我以前用 Entity-Framework 做过这个,但是由于某种原因它现在不起作用。

例如(使用 Adventureworks2008r2 数据库)我在 LinqPad 中运行以下查询:

(from t in Employees
orderby Guid.NewGuid()
select new {t.Person.FirstName,t.Person.LastName,t.JobTitle})

这将生成以下 SQL:
SELECT [t1].[FirstName], [t1].[LastName], [t0].[JobTitle]
FROM [HumanResources].[Employee] AS [t0]
INNER JOIN [Person].[Person] AS [t1] ON
[t1].[BusinessEntityID] = [t0].[BusinessEntityID]

那么我的 orderby 查询发生了什么?

我通过以下查询更进一步,发现 Guid.NewGuid() 只被调用一次。
(from r in (from t in Employees
select new {t.Person.FirstName,t.Person.LastName,t.JobTitle,
g = Guid.NewGuid()})
orderby r.g
select r)

这生成了以下 SQL 查询
-- Region Parameters
DECLARE @p0 UniqueIdentifier = '68ad5016-19ca-4e31-85c3-1d45618ea8c9'
-- EndRegion
SELECT [t2].[FirstName], [t2].[LastName], [t2].[JobTitle]
FROM (
SELECT [t1].[FirstName], [t1].[LastName], [t0].[JobTitle], @p0 AS [value]
FROM [HumanResources].[Employee] AS [t0]
INNER JOIN [Person].[Person] AS [t1] ON
[t1].[BusinessEntityID] = [t0].[BusinessEntityID]
) AS [t2]
ORDER BY [t2].[value]

知道发生了什么吗?

最佳答案

我相信问题是由 LinqPad 在直接查询数据库(而不是创建自己的 EF 连接)时创建 DBContext(或它在内部所做的任何事情)的方式引起的。如果我运行这个:

using (var context = new MyContext()) {

var query =
from x in context.MyTable
select new {
x.ID,
g = Guid.NewGuid()
};

}

我得到以下 SQL
SELECT 
[Extent1].[ID] AS [ID],
NEWID() AS [C1]
FROM [dbo].[MyTable] AS [Extent1]

这会为每一行生成一个唯一的 guid。您可以将 Linq 更改为 orderby Guid.NewGuid()你会得到你想要的随机排序。
var query =
from x in context.MyTable
orderby Guid.NewGuid()
select new {
x.ID
};

关于sql - 按新指南排序以获得随机顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20953067/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com