【发布时间】:2013-08-01 06:44:46
【问题描述】:
这是我的查询
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 查询来避免这个错误吗?
谢谢
【问题讨论】:
-
.代替::有效吗? -
这不起作用,但它确实让我思考。也许我缺少 :: 的替代方法。
-
我在语句顶部使用“DECLARE @dist AS Geography = 'POINT({0} {1})' 和“l.GeoLoc.STDistance(@dist.STBuffer(0.2 ).STAsText()) as Distance" 代替有问题的行所在的位置。我对这个解决方案不太满意,所以我会将答案再开放几天,以防有人有替代方案。
-
问题是
:被用作参数的占位符。 AFAIK 你无法逃脱:因此我认为你的黑客应该没问题。我认为您尝试过使用 \: 或 ::::
标签: nhibernate fluent-nhibernate sql-server-2012 geography