... Which should be an easy adjustment of your patch. Just make an extension method of QueryableUtil.GetQueryable.
/Johannes On Fri, Sep 3, 2010 at 10:53 AM, Johannes Gustafsson <[email protected]>wrote: > I'm with Frans on this. I've been thinking about this myself but I thought > of making a Linq version of ISession.CreateFilter. Like: > > var foo = session.Get<Foo>(1); > > session.FilterQuery(foo.Bars).Where(x => x.BarName == "a").List(); > > Or something... > > /Johannes > > > On Fri, Sep 3, 2010 at 9:12 AM, Frans Bouma <[email protected]> wrote: > >> > I think Frans can tell that was just a joke :-) >> >> I chuckled :) >> >> > And yes, it is similar to CreateFilter, with one BIG difference: a >> reference >> > to NHibernate is not needed, which means you can safely use it from the >> > Domain/Model classes without injecting a reference to the repository. >> > >> > The envisioned scenario is an extension of what can be currently >> > accomplished with lazy="extra". >> > For example, if you have a Currency entity with an ExchangeRates >> collection >> > (which is updated daily, hourly, whatever), you can do something like: >> > >> > var averageJulyRate = currency.ExchangeRates.AsQueryable() >> > .Where(r => r.Date >= new DateTime(2010, >> 7, >> > 1) && >> > r.Date < new DateTime(2010, >> 8, >> > 1) >> > .Average(r => r.Rate); >> >> instead of: (Didn't remember te method on ISession to get an >> IQueryable<T>, so I used .Linq<T>) >> var averageJulyRate = session.Linq<ExchangeRate>() >> .Where(r=>r.Currency.Id == >> currency.Id) >> .Where(r => r.Date >= new DateTime(2010, >> 7, >> 1) && >> r.Date < new DateTime(2010, 8, >> 1) >> .Average(r => r.Rate); >> >> ? >> >> > Now, I'm sure there are bugs with the implementation, mostly in the form >> of >> > unsupported scenarios and naïve assumptions, because I'm still learning >> NH >> > internals... >> > But I'm pretty sure the feature itself is not a bug, but something >> that's >> > been actively requested. >> >> The downside I see is that it makes a call to the DB where you >> might >> not expect it. With Linq it's already a struggle for some people (actually >> more than you'd expect) to determine just from the query where which code >> is >> ran: in memory or in the DB. With your feature you can think it's an >> in-memory thing, but you actually make a call to the db, which could be a >> problem when you receive the entities over a wire in a distributed >> scenario. >> >> >> Other than that, the feature could be handy :) (I haven't tried it >> out btw) >> >> FB >> >> > >> > Diego >> > >> > >> > >> > On Fri, Sep 3, 2010 at 00:13, Fabio Maulo <[email protected]> wrote: >> > >> > >> > Take care with your words... >> > The fact that I had some squabble with Frans does not mean that I >> > don't respect him and does not mean that we have to review all patches >> with >> > High priority. >> > >> > NH-2319 is the LINQ version of our CreateFilter, the patch is >> > interesting but it need to be analyzed with more details. >> > So far any LINQ applied to a collection, retrieved by NH, is >> always >> > safe as any LinqToObject. >> > Your request seems a bug masquerade of feature and needs a >> cautions >> > discussion >> > >> > >> > On Thu, Sep 2, 2010 at 11:46 PM, Diego Mijelshon >> > <[email protected]> wrote: >> > >> > >> > Anyone? >> > >> > C'mon guys, at least some criticism from the wind team! >> > If you don't look at the received patches, Frans Bouma >> wins! >> > (just kidding) >> > >> > Diego >> > >> > >> > >> > On Wed, Sep 1, 2010 at 00:19, Diego Mijelshon >> > <[email protected]> wrote: >> > >> > >> > I've implemented something I've seen requested >> several >> > times in SO and the users list: the ability to query persistent >> collections >> > using LINQ (server side, without initializing the collection and without >> > referencing NHibernate). >> > >> > Patch: http://216.121.112.228/browse/NH-2319 >> > >> > <http://216.121.112.228/browse/NH-2319> This >> > implementation should work for generic bag, set and list, with two >> > limitations: the relationship must be one-to-many and bidirectional. >> This >> > should still account for the majority of the collections out there. >> > There are probably many other ways in which it can >> be >> > improved, but I think it will be a useful feature. >> > >> > I'd really appreciate if any of the committers >> takes >> > some minutes to review it and, hopefully, include it. Ping me if you >> have >> > any questions. >> > >> > Diego >> > >> > >> > >> > >> > >> > >> > -- >> > Fabio Maulo >> > >> > >> > >> >> >> >
