这是我的查询
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 :(得分:2)
正如我在上述评论中所述。解决方案是以不同的方式重写查询 我替换了#34; geography :: STGeomFromText&#34;与
l.GeoLoc.STDistance(@dist.STBuffer(0.2).STAsText()) as Distance
并将以下内容放在查询的顶部
DECLARE @dist AS Geography = 'POINT({0} {1})'
答案 1 :(得分:0)
尝试从SQL中删除冒号(可能修复了雅各布的代码)。以下示例使用C#ASP.NET MVC,NHibernate和MySQL进行项目。删除sql中的冒号&#34; - &#34;评论修正了错误。
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);