具有指定Guid的实体框架OrderBy

时间:2013-11-28 03:31:51

标签: c# entity-framework azure-sql-database guid

我正在尝试使用Entity Framework从Azure SQL数据库中检索随机记录。我知道如果你指定:

OrderBy(x => Guid.NewGuid()) 

它将随机化查询结果。

但是,如果我指定一个Guid:

OrderBy(x => guidVariable)

它没有随机化结果。

我想这样做的原因是能够在随机化结果的每一次调用中改变随机化结果:

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

   recordRepository.FetchByIds(Ids)                                                                                   
                   .OrderBy(x => randomizeKey)
                   .Skip(seedIndex)
                   .Take(pageSize)
                   .ToList();

存储库代码:

 return Context.Entities.Include("Path")
                        .Include("Path")
                        .Where(x => ids.Contains(x.Id));

我是否正确假设Entity Framework解释Guid.NewGuid()并且SQL服务器自己生成?有办法解决这个问题,还是我做错了什么?

1 个答案:

答案 0 :(得分:2)

OrderBy(x => randomizeKey)对于每个项目都是相同的,因此您将在结尾处获得相同的序列

e.g。

new[] {"3", "1", "6"}.OrderBy(x=>5); // results "3", "1", "6"

如果您需要获得相同的序列,请尝试使用相同种子的using Random Number Generator

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的相同序列