Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按随机顺序的新Guid排序_Sql_Linq_Entity Framework_Linqpad - Fatal编程技术网

Sql 按随机顺序的新Guid排序

Sql 按随机顺序的新Guid排序,sql,linq,entity-framework,linqpad,Sql,Linq,Entity Framework,Linqpad,为了从Sql查询中随机获得结果,我通常按新的GUID排序。我以前用实体框架做过这件事,但是由于某些原因,它现在不起作用了 例如(使用adventureworks2008r2数据库),我在LinqPad中运行以下查询: (from t in Employees orderby Guid.NewGuid() select new {t.Person.FirstName,t.Person.LastName,t.JobTitle}) 这将生成以下SQL: SELECT [t1].[FirstNam

为了从Sql查询中随机获得结果,我通常按新的GUID排序。我以前用实体框架做过这件事,但是由于某些原因,它现在不起作用了

例如(使用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在直接查询数据库时创建DBContext(或它在内部执行的任何操作)的方式造成的(而不是创建自己的EF连接)。如果我运行这个:

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更改为
orderbyguid.NewGuid()
,这样您就可以得到所需的随机排序

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

@结果的随机顺序。@WalterStabosz我想在DB上做这个,看它肯定不一样。您正在返回guid,他按guid排序,但不返回。