http://fabiomaulo.blogspot.com/2010/07/nhibernate-linq-provider-extension.html
On Thu, Aug 19, 2010 at 11:41 PM, David Pfeffer <[email protected]> wrote: > That might work for instances of direct comparison, but what of an > extension method where the arguments are different... for example this > theoretical method: > > public static bool ExampleMethod(this int x, ExampleType y) { ... } > > In this example you have a usage but the usage isn't going to help you > guess the mapping type for ExampleType. The only way I can think of doing > that is with the extension method patch. If you have another idea I'd be > excited to hear it though. Otherwise would that be an acceptable solution > and should I go ahead with it? > > > On Thu, Aug 19, 2010 at 9:58 PM, Fabio Maulo <[email protected]> wrote: > >> ExpressionParameterVisitor >> NHibernateUtil.GuessType(expression.Type) >> >> We can't guess the type without the "usage context". >> myClass.MyProperty == something >> >> to really guess/know the type of "something" we have to know the mapping >> of "MyProperty". >> >> We may have an ugly patch-extension method where the user can specify the >> NH's IType but... well... that will be a patch not a solution. >> >> On Thu, Aug 19, 2010 at 3:46 PM, David Pfeffer <[email protected]>wrote: >> >>> Right, which is exactly what I'm working on right now... >>> >>> What I'm proposed is a fix for the issues relating to the LINQ provider >>> custom types. What do you all think of the solution? >>> >>> >>> On Thu, Aug 19, 2010 at 11:41 AM, Fabio Maulo <[email protected]>wrote: >>> >>>> I think that first we have to fix issues related to Linq-Provider and >>>> custom-types then we have to add some linq-extensions inside >>>> NHibernate-Spatial (as it has HQL extensions). >>>> >>>> >>>> On Thu, Aug 19, 2010 at 11:02 AM, David Pfeffer <[email protected]>wrote: >>>> >>>>> An example from NH Spatial -- >>>>> >>>>> I have a type... >>>>> >>>>> public class Breadcrumb >>>>> { >>>>> public virtual int Id { get; set; } >>>>> public virtual IGeometry Position { get; set; } >>>>> public virtual string Description { get; set; } >>>>> } >>>>> >>>>> ...and in my code I do the following... >>>>> >>>>> IGeometry center; >>>>> // code here to set the center to a useful point >>>>> var breadcrumbsWithinDistance = session.Query<Breadcrumb>().Where(x => >>>>> x.Position.Distance(center) < 500); >>>>> >>>>> Now, how would the LINQ engine know the mapping of *center*? Since it >>>>> isn't a property of a mapped class there's nothing already specified here >>>>> for what user type to use. >>>>> >>>>> I propose that line could be replaced as... >>>>> >>>>> var breadcrumbsWithinDistance = session.Query<Breadcrumb>().Where(x => >>>>> x.Position.Distance(center.AsUserType(new >>>>> NHibernate.Type.CustomType(typeof(NHibernate.Spatial.Type.MsSql2008GeographyType), >>>>> null) >>>>> )) < 500); >>>>> >>>>> (or whatever other user type is appropriate for that database engine) >>>>> >>>>> What do you think? >>>>> >>>>> >>>>> On Mon, Aug 16, 2010 at 5:16 PM, Fabio Maulo <[email protected]>wrote: >>>>> >>>>>> >>>>>> El 16/08/2010, a las 12:14, David Pfeffer <[email protected]> >>>>>> escribió: >>>>>> >>>>>> I would attempt to write a fix, but this isn't just a bug. There's a >>>>>> design issue to be resolved here as to how to go about implementing this. >>>>>> >>>>>> >>>>>> I'm not so sure about " a design issue"... >>>>>> >>>>>> >>>>>> One idea I have is to create an extension method, WithUserType(this >>>>>> object obj, IType type) that will be used to inform the LINQ provider as >>>>>> to >>>>>> the type (UserType, etc.). >>>>>> >>>>>> >>>>>> Try to write an example where the Type can't be inferred. >>>>>> Thanks. >>>>>> >>>>>> >>>>>> If this sounds like a good idea, would anyone be able to provide a few >>>>>> pointers as to where to look to hook this in? I will take a look and see >>>>>> if >>>>>> I can patch. >>>>>> >>>>>> Thanks. >>>>>> >>>>>> On Mon, Aug 16, 2010 at 10:53 AM, Fabio Maulo <<[email protected]> >>>>>> [email protected]> wrote: >>>>>> >>>>>>> Known issue >>>>>>> <http://216.121.112.228/browse/NH/component/10120> >>>>>>> http://216.121.112.228/browse/NH/component/10120 >>>>>>> >>>>>>> >>>>>>> On Fri, Aug 13, 2010 at 2:54 PM, David Pfeffer <<[email protected]> >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> Hello all, >>>>>>>> >>>>>>>> So I'm having a bit of difficulty trying to build a LINQ to NH >>>>>>>> Spatial provider. Specifically, I have not found a way to specify the >>>>>>>> user >>>>>>>> type for IGeometry types. So, even though I have the backend LINQ >>>>>>>> parser >>>>>>>> code plugged in, queries fail due to "No persister for: >>>>>>>> GeoAPI.Geometries.IGeometry." >>>>>>>> >>>>>>>> In Criteria and HQL specifying the user type is easy. How do I >>>>>>>> specify the user type for a LINQ query so that my backend code is >>>>>>>> invoked? >>>>>>>> >>>>>>>> Thanks! >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Fabio Maulo >>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>>> >>>> -- >>>> Fabio Maulo >>>> >>>> >>> >> >> >> -- >> Fabio Maulo >> >> > -- Fabio Maulo
