select o.id, l,  o.Freight from Order o join fetch o.Lines l where
l.Discount > 0
Then, it should need a client side part

2009/9/4 Steve Strong <[email protected]>

>
> Morning / Afternoon / Evening All
>
> Quick question that I'd appreciate your opinions on.  Given a query like
> this:
>
>            var q =
>                from o in db.Orders
>                select new
>                           {
>                               o.OrderId,
>                               DiscountedProducts =
>                                    from od in o.OrderLines
>                                    where od.Discount > 0.0m
>                                    select od, FreeShippingDiscount =
> o.Freight
>                           };
>
> I don't believe that it is possible to create exactly the shape that the
> user wants using HQL, which leaves me with two options:
>
> 1) Pull out the outer list in one query and the fill in the child lists as
> the user enumerates them
>
> 2) Do a join across the parent & child entities and pull all the data out
> in one go, and then perform the shaping on the client.
>
> Option 1 has the potential to be a N + 1 select, depending on how many
> items the user iterates through (I would assume that they are probably going
> to iterate all of them; if they only want a subset, then they should be
> adding the appropriate where clause to the query).  Obviously the N + 1 gets
> progressively worse the deeper the nesting becomes.
>
> Option 2 will pull a wide data set with duplicated data in the parent
> columns, which again would get progressively worse as the level of nesting
> increases.  It does only hit the database once though.
>
> Ultimately, I suspect there'll need to be some way of controlling which
> route is taken, since I don't think there is "one right answer".  However,
> there needs to be a default.  Opinions on which one it should be, plus any
> other alternatives, would be greatly appreciated.
>
> Cheers,
>
> Steve
>
>


-- 
Fabio Maulo

Reply via email to