public IQueryable <long> SearchIds(S search, Func <IQueryable <E>, IQueryable <E> > modify = null) { var query = GetBaseQuery(search); query = ModifySearch(query, search); if (modify != null) { query = modify(query); } //Finalize may include special sorting / etc. var husks = FinalizeQuery(query, search).Select(x => new EntityBase() { id = x }); //Note: applyfinal finalizes some limiters (such as skip/take) and ALSO tries to apply //the fallback ordering. This is ID and random, which we don't need to implement up here. return(provider.ApplyFinal(husks, search).Select(x => x.id)); }