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

Reply via email to