考虑我有以下代码段:
IQueryable<BaseEntity> someQueryble = ApplicationDbContext.BaseEntities; var randomQueryable = someQueryable.OfType<RandomEntity>() .Include(prop => prop.someRandomNavProp) .OrderBy(prop => prop.Id);
BaseEntities只是来自EF 6的ApplicationDbContext的DbSet.
RandomEntity继承自BaseEntity(Table-Per-Type层次结构)
然后,发生了一些奇怪的事
randomQueryable.Take(10).Count(); 10 randomQueryable.Take(10).ToList().Count; 20
解决方法
感谢@Evk和@IvanStoev发现了一篇关于Guid.NewGuid()订购的好文章:
https://stackoverflow.com/a/8140495/5417374
用以下扩展方法替换顺序函数解决了问题(基于上述问题中的其他答案):
public static IOrderedQueryable<BaseEntity> Randomize( this IQueryable<BaseEntity> queryable) { var seed = Random.NextDouble(); return queryable.OrderBy(o => sqlFunctions.Checksum(o.Id * seed)) .ThenBy(o => o.Id); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。