public async Task <IEnumerable <T> > FetchAsync(IObjectQuery query, bool readOnly = true) { var modelQuery = query.BuildQuery <T>(Db); var q = readOnly ? modelQuery.AsNoTracking() : modelQuery; return(await q.ToArrayAsync()); }
public async Task <bool> AnyAsync(IObjectQuery query) { if (query == null) { throw new ArgumentNullException(nameof(query), "query parameter should not be null"); } return(await CountAsync(query) > 0); }
public async Task <SearchResults <T> > SearchAsync(IObjectQuery query) { if (query == null) { throw new ArgumentNullException(nameof(query), "query parameter should not be null"); } // TODO: use single db call for count and results return(new SearchResults <T>(await CountAsync(query), await FetchAsync(query))); }
public async Task <int> CountAsync(IObjectQuery query) { if (query == null) { throw new ArgumentNullException(nameof(query), "query parameter should not be null"); } var countQuery = BuildCountQuery(query); return(await countQuery .AsNoTracking() .CountAsync()); }
private IQueryable <T> BuildCountQuery(IObjectQuery query) { var numberOfItemsToReturn = query.NumberOfItemsToReturn; var numberOfItemToSkip = query.NumberOfItemsToSkip; query.NumberOfItemsToReturn = query.NumberOfItemsToSkip = null; var modelQuery = query.BuildQuery <T>(Db); query.NumberOfItemsToReturn = numberOfItemsToReturn; query.NumberOfItemsToSkip = numberOfItemToSkip; return(modelQuery); }
public async Task <T> FindOneAsync(IObjectQuery query) { return(await query.BuildQuery <T>(Db) //.AsNoTracking() .FirstOrDefaultAsync()); }