That is roughly what I have. However, when you call visitor.Visit on the
argument in question there is the exception because of it not knowing which
IType to map to.

The ExampleMethod and ExampleType I refer to was from my example in an
earlier email...

public static bool ExampleMethod(this int x, ExampleType y) { ... }

Even if I map this method using a generator with buildHql method, I still
don't have a way to specify the IType for *ExampleType* from the above
example.

On Thu, Aug 19, 2010 at 11:14 PM, Fabio Maulo <[email protected]> wrote:

> I don't know what "ExampleMethod" and "ExampleType" are but if
> "ExampleType" have some meaning for persistence you can translate it to
> IType as we are doing for any parameter.
>
> David, I know that perhaps it doesn't look easy to implement but this is
> OSS.
>
> btw... backing to the title of this thread...
> NHSP has the registration of some HQLFunction you can map the name of the
> extension with the name of the HQLFunction (using exactly the same name or
> using a dictionary) and then you can use
>
> treeBuilder.MethodCall(theHqlFunctionName, 
> visitor.Visit(expression).AsExpression());
>
> or even more easy you can use LinqExtensionMethodAttribute to mark your
> extension and there specify the HQLFunction's name
>
> On Thu, Aug 19, 2010 at 11:56 PM, David Pfeffer <[email protected]>wrote:
>
>> How would I provide that? As far as I know, you'd have to use the
>> IHqlExpressionVisitor argument to the BuildHql method to "visit" that
>> argument of the extension method. Otherwise any expression passed to that
>> argument would not be evaluated. How would I specify the user type in this
>> instance?
>>
>>
>> On Thu, Aug 19, 2010 at 10:51 PM, Fabio Maulo <[email protected]>wrote:
>>
>>> In the implementation of of your Generator for your extension you can
>>> specify the IType.
>>> In this way you have a real LINQ extension working in RAM as it will work
>>> using NHibernate.
>>>
>>> If you are in a "safe-zone" where you can have the reference to
>>> NHibernate dll, you can use any other query-system provided by NHibernate,
>>> you don't need LINQ.
>>>
>>>
>>> On Thu, Aug 19, 2010 at 11:46 PM, David Pfeffer <[email protected]>wrote:
>>>
>>>> I've seen this blog post but I'm not sure how it applies. I'm aware of
>>>> how you'd implement ExampleMethod but not how you'd specify the user type
>>>> for mapping of ExampleType.
>>>>
>>>>
>>>> On Thu, Aug 19, 2010 at 10:44 PM, Fabio Maulo <[email protected]>wrote:
>>>>
>>>>>
>>>>> 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
>>>>>
>>>>>
>>>>
>>>
>>>
>>> --
>>> Fabio Maulo
>>>
>>>
>>
>
>
> --
> Fabio Maulo
>
>

Reply via email to