Anyone with any thoughts on this..?

On Feb 15, 1:25 pm, rsr <[email protected]> wrote:
> Another way to solve this problem seems to be to create an
> IResultTransformer that takes the first object in each row tuple:
>     public class FirstTupleResultTransformer :
> NHibernate.Transform.IResultTransformer
>     {
>         public System.Collections.IList TransformList
> (System.Collections.IList collection)
>         {
>             return collection;
>         }
>
>         public object TransformTuple(object[] tuple, string[] aliases)
>         {
>             return tuple[0];
>         }
>     }
>
> Add this to the query with SetResultTransformer, and then
> q.List<PatientIntensity>() works as I expect.
> For my purposes, it is sufficient to disregard the 1-Nth tuple objects
> in each row (more objects if more joins are added), and it'll throw an
> error if the first tuple returned by my query is not of the correct
> type, which is fine and dandy.
>
> Just seems like this is what should have happened by default with
> q.List<T>() rather than requiring one to do this explicitly.
>
> Still interested to hear from any others who have been this way....
>
> On Feb 14, 11:05 am, rsr <[email protected]> wrote:
>
>
>
> > Having a problem getting eager fetching of an association property to
> > work smoothly,
> > I have an entity called PatientIntensity with an association property
> > PatientStay.
>
> > A simple attempt to query in code:
> >     var q = es.Session.CreateSQLQuery(@"
> >     select {pi.*}, {ps.*}
> >     from patientintensity pi
> >     join patientstay ps on ps.patientstayid = pi.patientstayid")
> >    .AddEntity("pi", typeof(PatientIntensity))
> >    .AddJoin("ps", "pi.PatientStay");
>
> > Now, I would think that I can do
> >    var list = q.List<PatientIntensity>();
>
> > but when I do that, I get an error:
> > System.ArgumentException : The value "System.Object[]" is not of type
> > "PatientIntensity" and cannot be used in this generic collection.
> > Parameter name: value
> >         at System.ThrowHelper.ThrowWrongValueTypeArgumentException(Object
> > value, Type targetType)
> >         at System.Collections.Generic.List`1.VerifyValueType(Object value)
> >         at System.Collections.Generic.List`1.System.Collections.IList.Add
> > (Object item)
> >         at NHibernate.Util.ArrayHelper.AddAll(IList to, IList from)
> >         at NHibernate.Impl.SessionImpl.ListCustomQuery(ICustomQuery
> > customQuery, QueryParameters queryParameters, IList results)
> >         at NHibernate.Impl.SessionImpl.List(NativeSQLQuerySpecification 
> > spec,
> > QueryParameters queryParameters, IList results)
> >         at NHibernate.Impl.SessionImpl.List[T](NativeSQLQuerySpecification
> > spec, QueryParameters queryParameters)
> >         at NHibernate.Impl.SqlQueryImpl.List[T]()
>
> > However, I can get it to work, including join fetching the
> > association, by doing the following;
> >     var l = q.List<object[]>();
> >     var l2 = l.Select(x => x[0] as PatientIntensity).ToList();
>
> > Basically, take the first object in the array for each row and return
> > it as a list.
>
> > Is this what we would expect, or am I missing some way to get NH to do
> > this for me? I note that all of the documentation examples I find seem
> > to be using the non-generic List() method rather than the generic
> > List<T> method, so maybe this is just how things are?
>
> > Thanks
> > roger- Hide quoted text -
>
> - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to