で新しい Linq カスタム メソッドを作成し、LinqToHqlGeneratorsRegistry
SQL 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のようなメソッドが見つかりません
ありがとう!