Thanks guys. I think we'll use MultiQuery. On Tue, Mar 10, 2009 at 7:51 PM, TigerShark <[email protected]>wrote:
> > Hmm... I just played around a bit with the new trunk version of > NHibernate and the Future<T> methods... So far it's a solution to the > problem I mentioned of not having typed multicriterias, but it does > impose some rather odd design issues. > > If I wan't to return the virtual row count as an out parameter of a > method, I must make sure not to call .Value of FutureValue<T> before I > have created my real query as this: > > 1. construct base query > 2. assign the total row count criteria.FutureValue<int> to a temporary > variable based on the base query (I'm using > CriteriaTransformer.TransformToRowCount(criteria)) - Not > calling .Value > 3. complete query (add projections, filtering, ordering etc.) > 4. assign criteria.Future<T> to temporary variable (executes both > queries) > 5. set out parameter of count using future count.Value > 6. return resultset enumerable > > This is of course my own design oddities, which can be corrected in > some ways, but in it's entirety it does look weird, and never the > less, it a very cool feature! :D > > On 10 Mar., 21:36, ccollie <[email protected]> wrote: > > if you're using trunk, try Future<T> and FutureValue<T> > > > > On Mar 10, 12:59 pm, TigerShark <[email protected]> wrote: > > > > > Oh, and BTW, I have looked at MultiCriteria, but it seems it can't > > > return typed resultsets. But if you don't manipulate the resultset and > > > uses it to bind directly, it might be worth taking a look at that, as > > > it can perform your task in a single db call. > > > > > On 10 Mar., 17:57, TigerShark <[email protected]> wrote: > > > > > > I usually perform a count on my criteria before performing any > paging. > > > > That way I issue two selects, one for the resultset count and another > > > > for the actual resultset. > > > > > > Normally I do something like this: > > > > > > public IEnumerable<ResultObject> GetPagedResultSet(out int count, > > > > QueryRange range, params Order[] orders) { > > > > var criteria = currentSession.CreateCriteria(typeof(ResultObject)) > > > > .SetProjection(Projections.Count(Projections.Id())); > > > > > > count = criteria.UniqueResult<int>(); > > > > > > criteria.SetProjection(null); > > > > > > if(!QueryRange.IsNullOrEmpty(range)) { > > > > range.Apply(criteria); > > > > } > > > > > > if(orders != null) { > > > > foreach(var order in orders) { > > > > criteria.AddOrder(order); > > > > } > > > > } > > > > > > return criteria.List<ResultObject > > > > > > } > > > > > > The code above is from memory, and might be subject to your own > > > > changes :) > > > > > > Furthermore the QueryRange class is one I have created to ease the > > > > paging. I can post the code for it, if you'd like. > > > > > > On 10 Mar., 17:33, Robin Nadeau <[email protected]> wrote: > > > > > > > Is there a way to get the item count from the dataset when doing > paging? > > > > > > > -- > > > > > Robin Nadeau, B.Eng. > > > > > Software Developer > > > -- Robin Nadeau, B.Eng. Software Developer --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nhusers?hl=en -~----------~----~----~----~------~----~------~--~---
