Nhibernate';并非所有命名参数都已设置';使用空间查询时

Nhibernate';并非所有命名参数都已设置';使用空间查询时,nhibernate,fluent-nhibernate,sql-server-2012,geography,Nhibernate,Fluent Nhibernate,Sql Server 2012,Geography,这是我的问题 var selectDinnerByDistance = string.Format( @"Select u.ProfileImageUrl as ProfileImageUrl, d.Starter as Starter, d.Main as Main, d.Dessert as Dessert,

这是我的问题

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>();
查询在ManagementStudio中运行良好。是否有其他方法可以使用直接sql查询来避免此错误


正如我在上面的评论中所说的,谢谢你。解决方案是以不同的方式重写查询 我将“geography::stgeomefromtext”替换为

l.GeoLoc.STDistance(@dist.STBuffer(0.2).STAsText()) as Distance
并将以下内容放置在查询的顶部

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

尝试从SQL字符串中删除冒号字符。即使注释中的冒号也可能导致此错误。下面的修正是将“Note:”改为“Note”


代替
行吗?那没用,但确实让我思考了一下。也许有一个我缺少的::的替代方法。我使用语句顶部的“DECLARE@dist AS Geography=”POINT({0}{1})”和“l.GeoLoc.STDistance(@dist.STBuffer(0.2).statext())作为距离来修复它“取代了冒犯的界线。我对这个解决方案不太满意,所以我会将答案保留几天,以防有人有其他选择。问题是
用作参数的占位符。好吧,你逃不了
,因此我认为你的黑客应该没问题。我想你已经试过使用\:或::
DECLARE @dist AS Geography = 'POINT({0} {1})'
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);