gpt4 book ai didi

c# - ToList() 在使用 Include 时评估不正确

转载 作者:行者123 更新时间:2023-11-30 12:40:52 26 4
gpt4 key购买 nike

考虑我有以下片段:

IQueryable<BaseEntity> someQueryble = ApplicationDbContext.BaseEntities;
var randomQueryable = someQueryable.OfType<RandomEntity>()
.Include(prop => prop.SomeRandomNavProp)
.OrderBy(prop => prop.Id);

BaseEntities 只是来自 EF 6 的 ApplicationDbContextDbSetRandomEntity 继承自 BaseEntity(Table-Per-Type 层次结构)

然后,奇怪的事情发生了:

randomQueryable.Take(10).Count();
10
randomQueryable.Take(10).ToList().Count;
20

Include 被移除时,一切正常。为什么 .include 会影响 ToList,我该如何解决?

编辑:生成的SQL:

http://pastebin.com/SS3WD7P6

注意 - 它来自生产数据库,因此可读性可能会受到影响。第一个查询是关于 Count,第二个是关于 ToList()

最佳答案

感谢@Evk 和@IvanStoev 找到了一篇关于通过 Guid.NewGuid() 进行排序的好帖子:https://stackoverflow.com/a/8140495/5417374

用以下扩展方法替换 order 函数解决了问题(基于上述问题中的其他答案):

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);
}

关于c# - ToList() 在使用 Include 时评估不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40387740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com