Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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
C# 具有指定Guid的实体框架OrderBy_C#_Entity Framework_Azure Sql Database_Guid - Fatal编程技术网

C# 具有指定Guid的实体框架OrderBy

C# 具有指定Guid的实体框架OrderBy,c#,entity-framework,azure-sql-database,guid,C#,Entity Framework,Azure Sql Database,Guid,我正在尝试使用实体框架从Azure SQL数据库检索随机记录。我知道如果您指定: OrderBy(x => Guid.NewGuid()) 它将随机化查询结果 但是,如果指定Guid: OrderBy(x => guidVariable) 它不会随机化结果 我想这样做的原因是能够分页随机结果,而不必在每次调用时更改随机性: (我使用的是返回IQueryable的存储库模式) 存储库代码: return Context.Entities.Include("Path")

我正在尝试使用实体框架从Azure SQL数据库检索随机记录。我知道如果您指定:

OrderBy(x => Guid.NewGuid()) 
它将随机化查询结果

但是,如果指定Guid:

OrderBy(x => guidVariable)
它不会随机化结果

我想这样做的原因是能够分页随机结果,而不必在每次调用时更改随机性:

(我使用的是返回IQueryable的存储库模式)

存储库代码:

 return Context.Entities.Include("Path")
                        .Include("Path")
                        .Where(x => ids.Contains(x.Id));
假设实体框架解释Guid.NewGuid()并让SQL server生成自己的Guid.NewGuid()是否正确?有办法解决这个问题吗?还是我做错了什么

OrderBy(x=>randomizeKey)
对于每个项目都是相同的,因此您将在最后得到相同的序列

e、 g

如果需要获得相同的序列,请尝试使用相同的种子

Random r1 = new Random(4);

var result1 = new[] {"3", "1", "6"}.OrderBy(x=>r1.Next());

Random r2 = new Random(4);

var result2 = new[] {"3", "1", "6"}.OrderBy(x=>r2.Next());

您将获得相同的result1和result2序列

什么是
Guid变量
?指定的Guid变量它是预定义的吗?如果您没有在每次检索项目时创建新的
Guid
,它当然会根据这个预先存在的
Guid
对项目进行排序。所以它总是返回相同的序列。第一个方法的优点是,每次调用它时,它都会创建一个新的
Guid
,因此每次都会随机化。谢谢!我猜我是在假设guid在每次比较时都强制进行不同的计算,尤其是在与int比较时。现在我了解了算法。。。
new[] {"3", "1", "6"}.OrderBy(x=>5); // results "3", "1", "6"
Random r1 = new Random(4);

var result1 = new[] {"3", "1", "6"}.OrderBy(x=>r1.Next());

Random r2 = new Random(4);

var result2 = new[] {"3", "1", "6"}.OrderBy(x=>r2.Next());