爲什麼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。 –