次のクエリが8つの船舶のリストを返す理由を説明できますか?私は、クエリからInclude(m => m.VesselAddresses.Select(c => c.Address))
またはOrderBy
を削除する場合Entity Framework Take()がより多くの要素を返します
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();
、それだけで正常に動作し、4つのレコードを返しますが、それがあるとして、私はそれを残す場合は、それも私が指定した、8つのレコードを返すTake(4)
EDIT
これは、ほとんどのアパートテーブルの同じクエリですが、このクエリがうまく動作し、常に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();
を
この回答を見ることができます:http://stackoverflow.com/a/12065589/4550393。 「foreachまたはToList()が完了するまで、linq-To-Entitiesクエリは実際にデータベースへのラウンドトリップを行いません」というステートメントがあります。これはヒントを与えるかもしれない。 – Norman