为什么EF生成一个查询,以便以下内容不生成结果行并且首先引发异常。尽管在结果中包含Count,为什么此EF查询不返回结果?
IQueryable<EntityName> repo = GetQuery<EntityName>();
IQueryable<EntityName> query = repo.Where(x => x.Discriminator == 1);
var result = repo.Select(x => new
{
TotalRecords = query.Count(),
Results = query.Skip(request.Skip).Take(request.Take).ToList()
}).First();
这个技巧允许我在EF中的单个数据库调用下运行多个查询;我打电话给任意库repo
,并返回一个新的对象,其中每个属性是一个子查询。只要存在query
IQueryable中的记录,就会生效。然而,我惊讶地发现当query
中没有记录时,没有任何返回(即query.Count()不包含在结果中)。我认为即使query
中没有实体,这样的查询也应该产生结果行,因为它涉及Count(),但它不返回任何内容。我怀疑这与EF必须在底层生成一个单一的结果集有关。
不要紧,什么是'Select'内,结果计数总是一样的输入设置。 'First'(或'Take(1)')可以将其限制为最大1,即0或1.这基本上是SQL查询行为,而不是EF。 –