【发布时间】:2014-01-06 15:17:26
【问题描述】:
为了从 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]
知道发生了什么吗?
【问题讨论】:
-
@PeterRing 结果的随机顺序。
-
@WalterStabosz 我想在数据库上执行此操作,请参阅stackoverflow.com/a/4120132/358661
标签: sql linq entity-framework linqpad