有人可以解释为什么以下查询会返回8艘船的清单吗?
var vessels = await db.Vessels
.Include(m => m.Images.Select(c => c.Activity))
.Include(m => m.VesselAddresses.Select(c => c.Address))
.Where(m => m.Images.Any(c => c.Activity.Active))
.Where(m => m.Activity.Active)
.Where(m => m.Listed)
.Where(m => m.Activity.User.Active)
.OrderBy(m => Guid.NewGuid())
.Take(4)
.ToListAsync();
如果我从查询中删除Include(m => m.VesselAddresses.Select(c => c.Address))
或OrderBy
,那么它工作正常并返回4条记录,但是如果我保持原样,那么它会返回8条记录,即使我指定了{ {1}}
修改
这对于apartments表几乎是相同的查询,但是这个查询工作得很好并且总是返回4行:
Take(4)
答案 0 :(得分:0)
实体框架在您调用ToListAsync
之前不会运行您正在进行的查询,因此我的猜测是您将Include无法转换为SQL,因此查询构建器会忽略它直到它之后执行因为take
将TOP
转换为sql的SQL,意味着在Take
之后应用了包含
在.ToListAsync()之后移动.Take(4)应该更正
我还假设你正在使用.OrderBy(m => Guid.NewGuid())来随机化我建议的结果而不是Random.NextDouble()
guid对随机化来说是过度的