【发布时间】:2016-05-04 11:31:18
【问题描述】:
谁能解释一下为什么下面的查询返回 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 条记录,即使我指定了 Take(4)
编辑
这与公寓表的查询几乎相同,但该查询运行良好,并且总是返回 4 行:
var apartments = await db.Apartments
.Include(m => m.Images.Select(c => c.Activity))
.Include(m => m.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();
【问题讨论】:
-
您可能想看看这个答案:stackoverflow.com/a/12065589/4550393。那里的语句是:“请记住,在完成 foreach 或 ToList() 之前,linq-To-Entities 查询实际上不会对数据库进行往返。”可能这是一个提示。
标签: c# entity-framework