2013-08-01 3 views
3

를이 내 쿼리NHibernate에 공간 쿼리

var selectDinnerByDistance = string.Format(
      @"Select 
       u.ProfileImageUrl as ProfileImageUrl, 
       d.Starter as Starter, 
       d.Main as Main, 
       d.Dessert as Dessert, 
       d.Dry as DryDinner, 
       d.[Date] as EventDate, 
       l.GeoLoc.STDistance(geography::STGeomFromText('POINT({0} {1})', 4326)) as Distance 
       from dbo.Locations l 
       join Dinners d on d.LocationId = l.Id 
       join Users u on u.Id = d.UserId 
       Order by Distance asc 
       OFFSET {2} ROWS 
       FETCH NEXT {3} ROWS ONLY" 
      , lat, lng, skip, take); 
var output = _session 
    .CreateSQLQuery(selectDinnerByDistance) 
    .SetResultTransformer(Transformers.AliasToBean<DinnerListItemDto>()) 
    .List<DinnerListItemDto>(); 

내가지고있어 제외되는 사용하는 경우 '모든 명명 된 매개 변수가 설정되어있는'

Not all named parameters have been set: [':STGeomFromText'] 

쿼리가 관리 스튜디오에서 잘 작동입니다 . 이 오류를 피하기 위해 SQL 쿼리를 사용해야하는 또 다른 방법이 있습니까?

감사합니다.

+0

'::'대신 '.'가 작동합니까? – Firo

+0

그게 작동하지 않았지만 그것은 나를 생각하게했다. 아마도 거기에 대한 대안이 있습니다 :: 나는 실종 됐습니다. –

+1

제가 를 사용하여 고정 "지리 = AS @dist 선언 'POINT ({0} {1})'발언 의 상단 "l.GeoLoc.STDistance (dist.STBuffer @ (0.2) .STAsText()) as distance " 불쾌한 줄이있는 곳 대신에 나는이 솔루션에 만족하지 않아 다른 누군가에게 대안이있을 경우를 대비하여 며칠 동안 답을 남겨 둘 것입니다. –

답변

2

위의 설명에 언급했듯이. 이 솔루션은 다른 방법으로 쿼리를 다시 작성했다 나는 쿼리의 상단에 다음

l.GeoLoc.STDistance(@dist.STBuffer(0.2).STAsText()) as Distance 

으로 "지리 :: STGeomFromText"를 대체 배치

DECLARE @dist AS Geography = 'POINT({0} {1})' 
0

SQL에서 콜론을 제거하십시오 (Jacob의 코드를 수정했을 가능성이있는 것). 아래 예제에서는 C# ASP.NET MVC, NHibernate 및 MySQL을 사용하는 프로젝트입니다. SQL "-"주석에서 콜론을 제거하면 오류가 수정되었습니다.

string sql = string.Format(@"select o.orderid from order o 
    where o.orderid in (1, 2, 3) -- Note: Orders 1-3 special 
    {0} {1};", 
    whereDates, orderBy);