1

で新しい Linq カスタム メソッドを作成し、LinqToHqlGeneratorsRegistrySQL Server 2008STDistance地理関数を使用したいのですが、どうすればよいですか:

1) SQL ServerCoordinate.DistanceTo(other)で交換される高レベル メソッド (インスタンス メソッド) をマップしますか? geoPoint.STDistance(otherGeoPoint)私の試みはこれです:

public class DistanceMethodGenerator : BaseHqlGeneratorForMethod
{
    public DistanceMethodGenerator()
    {
        base.SupportedMethods = new[] { ReflectionHelper.GetMethodDefinition<ICoordinate>(coordinate => coordinate.DistanceTo(null)) };
    }
    public override HqlTreeNode BuildHql(MethodInfo method, System.Linq.Expressions.Expression targetObject, ReadOnlyCollection<System.Linq.Expressions.Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor)
    {

        //what to do here to tranform: coord.DistanceTo(otherCoord) in sql     //coord.STDistance(otherCoord)?
        return ????
    }
}
public sealed class LinqToSqlGeneratorRegistrypublic : DefaultLinqToHqlGeneratorsRegistry
{
    public LinqToSqlGeneratorRegistrypublic()
    {
        RegisterGenerator(ReflectionHelper.GetMethodDefinition<ICoordinate>(coordinate => coordinate.DistanceTo(null)),
                          new DistanceMethodGenerator());
    }
}

2) fluentNHibernate でそれを登録する方法LinqToHqlGeneratorsRegistry<LinqToSqlGeneratorRegistrypublic >()、FluentNHibernateのようなメソッドが見つかりません

ありがとう!

4

1 に答える 1