我有以下方法:
ServiceType GetWithValidServices(long ServiceTypeID);
以及以下功能:
public ServiceType GetWithValidServices(long ServiceTypeID)
{
IQuery query = CurrentSession.CreateQuery("select dl.ServiceType from Service as dl"
+ "where dl.ServiceType.ID = :id and dl.IsValid = true"
+ "order by dl.HavePriority desc");
query.SetInt64("id", ServiceTypeID);
var dlArt = query.UniqueResult<ServiceType>();
return dlArt;
}
在下面的方法中,我调用上面提到的函数:
public ServiceCollection GetService(long ServiceTypeID)
{
ServiceType d = DomainToWebgridMapper.GetWebgridServiceType(DaoFactory.Instance.ServiceTypeDao.GetWithValidService(ServiceTypeID));
return d.Service;
}
我的问题是查询运行不正常。我可以看到服务但是dl.IsValid没有运行的过滤器,他也没有按优先顺序排序。
我在其他一些方法中使用where子句,并且它工作正常。
我不知道这里出了什么问题。也许有人可以帮助我。
提前致谢
答案 0 :(得分:0)
我想我知道你的问题是什么;它与你如何连接字符串以创建查询有关。考虑一下:
string query = "select dl.ServiceType from Service as dl"
+ "where dl.ServiceType.ID = :id and dl.IsValid = true"
+ "order by dl.HavePriority desc";
因为你没有在字符串的开头/结尾插入任何空格或换行符,所以你的查询会变成这样:
select dl.ServiceType from Service as dlwhere dl.ServiceType.ID = :id and dl.IsValid = trueorder by dl.HavePriority desc
^^^^^^^ ^^^^^^^^^
看看我在哪里标出了问题?要解决此问题,请在所有内容的末尾添加一个额外的空格,但要连接的最后一个字符串构成查询,或使用类似verbatim string literal的内容。
IQuery query = CurrentSession.CreateQuery(
"select dl.ServiceType from Service as dl " +
"where dl.ServiceType.ID = :id and dl.IsValid = true " +
"order by dl.HavePriority desc"
);