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
>> >
>> >
>> >
>>
>>
>>
>