commentes in JIRA On Fri, Sep 3, 2010 at 8:37 AM, Diego Mijelshon <[email protected]>wrote:
> It can be done, but it defeats the whole idea of NH-ignorance in the client > code. > > Diego > > > > On Fri, Sep 3, 2010 at 05:53, 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 >>> > >>> > >>> > >>> >>> >>> >> > -- Fabio Maulo
